将与view(CardStackAdapter)相关的所有方法作为空对象引用返回的片段

问题描述 投票:0回答:1

我通常是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

非常感谢批评和解释。谢谢

java android android-fragments android-xml
1个回答
0
投票

如何移动这条线

mUsersList.setLayoutManager(new CardStackLayoutManager(getContext()));

onCreateViewonViewCreated

© www.soinside.com 2019 - 2024. All rights reserved.