java - 返回与视图(CardStackAdapter)相关的所有方法作为空对象引用的片段
问题描述
一般来说,我是 android studio 和 java 的新手。我已经寻找了很多答案,但由于某种原因无法让它发挥作用。显然我一直提到的观点总是空的
我试过先给它充气,检查我所有的 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
?
推荐阅读
- r - 如何在 rgl 中绘制颜色条?
- python - 在处理大量图像时释放内存
- python - SQL LIKE 多个值
- swift - 在 Swift 中匹配数据类型
- jupyter-notebook - Google Colab 中的编号标题和目录
- jakarta-ee - 是否可以在 jar 中公开 JAX RS 类而不在 web.xml / Application 子类中声明它们?
- ruby-on-rails - 如何为其中的每个项目显示带有复选框的 Rails 下拉菜单?
- c# - 空 CallerMemberName 等属性
- python-3.x - 解析 Tableau xml 不保留原始文件
- php - 如何访问单独文件中的类函数变量?