我通常是android studio和java的新手。我已经寻找了很多答案,由于某种原因,它无法正常工作。显然,我一直引用的视图始终为null
我先尝试夸大它,检查我所有的xml,确保没有重复的ID,但似乎没有一个明确的解决方案。
有人可以向我解释为什么它总是返回null吗?
下面是我使用的片段类
public class CardsFragment extends Fragment{
private CardStackView mUsersList;
private DatabaseReference mFriendsDatabase;
private DatabaseReference mUsersDatabase;
private FirebaseAuth mAuth;
private String mCurrent_user_id;
private View mMainView;
public CardsFragment() {
// Required empty public constructor
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mMainView = inflater.inflate(R.layout.fragment_friends, container, false);
mUsersList = mMainView.findViewById(R.id.card_stack_view);
mAuth = FirebaseAuth.getInstance();
mCurrent_user_id = mAuth.getCurrentUser().getUid();
mFriendsDatabase = FirebaseDatabase.getInstance().getReference().child("Friends").child(mCurrent_user_id);
mFriendsDatabase.keepSynced(true);
mUsersDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
mUsersDatabase.keepSynced(true);
mUsersList.setLayoutManager(new CardStackLayoutManager(getContext()));
// Inflate the layout for this fragment
return mMainView;
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerOptions<ItemModel> options =
new FirebaseRecyclerOptions.Builder<ItemModel>()
.setQuery(mUsersDatabase, ItemModel.class)
.setLifecycleOwner(this)
.build();
FirebaseRecyclerAdapter<ItemModel, UsersViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<ItemModel, CardsFragment.UsersViewHolder>(options) {
@NonNull
@Override
public CardsFragment.UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new CardsFragment.UsersViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_card, parent, false));
}
@Override
protected void onBindViewHolder(@NonNull CardsFragment.UsersViewHolder holder, int position, @NonNull ItemModel model) {
//We want to pass the name of the user it will get that name and than will stored in layout (user_single_layout.xml -> display_name)
holder.setName(model.getName());
holder.setUserStatus(model.getStatus());
holder.setUserImage(model.getThumb_image(), getActivity().getApplicationContext());
holder.setUserInstrument(model.getInstrument());
holder.setUserGenre(model.getGenre());
final String user_id = getRef(position).getKey();
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent profileIntent = new Intent(getContext(), ProfileActivity.class);
profileIntent.putExtra("user_id", user_id);
Log.d(user_id, "onClick: ");
startActivity(profileIntent);
}
});
}
};
mUsersList.setAdapter(firebaseRecyclerAdapter);
}
这是我的xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.example.sos.CardsFragment">
<com.yuyakaido.android.cardstackview.CardStackView
android:id="@+id/card_stack_view"
android:clipToPadding="false"
android:padding="8dp"
android:layout_height="match_parent"
android:layout_width="match_parent"/>
</FrameLayout>
错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.yuyakaido.android.cardstackview.CardStackView.setLayoutManager(androidx.recyclerview.widget.RecyclerView$LayoutManager)' on a null object reference
at com.example.sos.CardsFragment.onCreateView(CardsFragment.java:71)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
at androidx.fragment.app.FragmentManagerImpl.execSingleAction(FragmentManagerImpl.java:1696)
at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:299)
at androidx.fragment.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:235)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1244)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
at android.view.View.measure(View.java:23296)
at androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
at android.view.View.measure(View.java:23296)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
at android.view.View.measure(View.java:23296)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
at android.view.View.measure(View.java:23296)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure(View.java:23296)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
at android.view.View.measure(View.java:23296)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:899)
at android.view.View.measure(View.java:23296)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2886)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1916)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2171)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1785)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7833)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
at android.view.Choreographer.doCallbacks(Choreographer.java:723)
at android.view.Choreographer.doFrame(Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
2020-04-18 03:04:18.718 27485-27485/com.example.sos E/AndroidRuntime: at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
我必须承认我正在遵循指南,并试图模仿布局,但是我想这并没有奏效,并且由于过时了,尝试实施起来很痛苦。https://github.com/akshayejh/Lapit---Android-Firebase-Chat-App/blob/master/app/src/main/java/in/tvac/akshaye/lapitchat/FriendsFragment.java
我使用的视图:https://github.com/yuyakaido/CardStackView
非常感谢批评和解释。谢谢
如何移动这条线
mUsersList.setLayoutManager(new CardStackLayoutManager(getContext()));
从onCreateView
到onViewCreated
?