Java 在RecyclerView布局管理器上获取空指针异常
嗨,伙计们,我有以下错误,我似乎无法解决 我有 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)” 我的代码与常规示例略有不同,因为我是在片段中而不是在活动中执行此操作的 这是我的代码。Java 在RecyclerView布局管理器上获取空指针异常,java,android,android-fragments,nullpointerexception,realm,Java,Android,Android Fragments,Nullpointerexception,Realm,嗨,伙计们,我有以下错误,我似乎无法解决 我有 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)” 我的代码与常规示例略有不同,因为我是在片段中而不是在活动中执行此操作的 这是我的代码。 我有一个完整片段的xml: <F
我有一个完整片段的xml:
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="mtr.MainActivityFragmentTwo">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/grades"
android:textStyle="bold"
android:textSize="40dp"
android:gravity="center_horizontal"
android:layout_gravity="center"
/>
</FrameLayout>
我创建的适配器是
public class gradeRealmAdapter extends RealmRecyclerViewAdapter<Grade, gradeRealmAdapter.GradeViewHolder> {
private final MainActivityFragmentTwo activity;
public gradeRealmAdapter (MainActivityFragmentTwo activity, RealmResults<Grade> realmResults) {
super(activity.getActivity(), realmResults, true);
this.activity = activity;
}
@Override
public GradeViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new GradeViewHolder(inflater.inflate(R.layout.gradeitem, parent, false));
}
@Override
public void onBindViewHolder(GradeViewHolder holder, int position) {
Grade grade = getData().get(position);
holder.title.setText(grade.toString());
}
class GradeViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener {
public TextView title;
public Grade grade;
public GradeViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.grade_text_view);
view.setOnLongClickListener(this);
}
public boolean onLongClick(View v) {
activity.deleteItem(grade);
return true;
}
}
}
我似乎无法解决这个问题。有人知道我做错了什么吗?让我们试着改变一下
recyclerView.setLayoutManager(新的LinearLayoutManager(this.getContext())代码>
与
recyclerView.setLayoutManager(新的LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false))代码>
并对onCreateView进行一些更新:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView =inflater.inflate(R.layout.fragment_main_activity_fragment_two,container, false);
recyclerView = (RecyclerView) rootView.findViewById(R.id.realm_recycler_view);
setupRecyclerView();
return rootView;
}
我有一个content_片段,它保存着recyclerview
然后,您需要在上查找视图ID
,而不是活动的布局
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main_activity_fragment_two, container, false);
// Don't use getActivity().findViewById
recyclerView = (RecyclerView) rootView.findViewById(R.id.realm_recycler_view);
setupRecyclerView();
return rootView;
}
然后,您还有领域
向后初始化
realm.init(getActivity()); // This throws an exception as well
realm = Realm.getDefaultInstance(); // It is initialized afterwards
因此,在onAttach
中也要解决这个问题,在这里您可以保证有一些上下文
@Override
public void onAttach(Context context) {
super.onAttach(context);
realm = Realm.getDefaultInstance();
realm.init(context);
}
在onViewCreated()
不在onCreate
中您确定recyclerView不为空吗?或者甚至存在于XML布局中?为什么不在onCreateView
中初始化您的RecyclerView
?您确定您的onCreate()
甚至正在被调用/调用/运行吗?请尝试用getActivity()替换此.getContext()。。。。为什么要尝试从活动中获取视图?我已将其更改为这种方式,但仍会收到相同的错误然后fragment\u main\u activity\u fragment\u two.xml
不包含@+id/realm\u recycler\u view
。这就是您获取NullPointer的基本原因,但content\u main\u fragment\u two确实包含该ID,或者它们都应该包含该ID?您只能在片段中膨胀一个布局,因此我不确定这两者的含义。content\u main\u fragment\u two.xml
未被片段加载,fragment\u main\u activity\u fragment\u two
。如果在fragment\u main\u activity\u fragment\u two.xml
中没有要查找的RecyclerView元素,则会导致空指针。这是findViewById
@Reshad在更改后的文档化功能moverecyclerView=(recyclerView)getActivity().findViewById(R.id.realm\u recycler\u视图);setupRecyclerView()
to OnCreateView如果看到我的答案,您的更新仍然会导致错误,显然我假设您也从onCreate中删除了setUpRecyclerView(),对吗?是的,我已经在那里删除了它。我将内容xml的recyclerview部分移动到片段xml中,现在我似乎得到了记录,但它看起来有点奇怪(屏幕大小的行):下面是Snot,NullPointerException是否仍然存在?这与我的回答有什么不同?
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main_activity_fragment_two, container, false);
// Don't use getActivity().findViewById
recyclerView = (RecyclerView) rootView.findViewById(R.id.realm_recycler_view);
setupRecyclerView();
return rootView;
}
realm.init(getActivity()); // This throws an exception as well
realm = Realm.getDefaultInstance(); // It is initialized afterwards
@Override
public void onAttach(Context context) {
super.onAttach(context);
realm = Realm.getDefaultInstance();
realm.init(context);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView =inflater.inflate(R.layout.fragment_main_activity_fragment_two,container, false);
recyclerView = (RecyclerView) rootView.findViewById(R.id.realm_recycler_view);
setupRecyclerView();
return rootView;
}