片段内的 DialogFragment 内的 RecyclerView
RecyclerView inside DialogFragment inside Fragment
我正在尝试在 Fragment 内的 DialogFragment 内膨胀 RecyclerView。
我按照指南正常制作了 RecyclerView Adapter。
但是我收到这个错误java.lang.NullPointerException: Attempt to invoke virtual method 'voidandroid.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference
在线
recyclerView.setLayoutManager(manager);
完整代码如下
public class AlertFragment extends DialogFragment {
RecyclerView recyclerView;
RecyclerView.Adapter adapter2;
RecyclerView.LayoutManager manager;
ArrayList<String> goalname = new ArrayList<String>();
ArrayList<String> goalcategory = new ArrayList<String>();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_alert, container, false);
goalname.add("Running");
goalcategory.add("Physical");
goalname.add("Yoga");
goalcategory.add("Physical");
goalname.add("Gym");
goalcategory.add("Physical");
goalname.add("Meditation");
goalcategory.add("Mental");
goalname.add("Puzzle Solving");
goalcategory.add("Habits");
manager = new LinearLayoutManager(getActivity());
recyclerView = (RecyclerView) getActivity().findViewById(R.id.bookhistory);
recyclerView.setLayoutManager(manager);
adapter2 = new GoalListAdapter(goalname, goalcategory,getActivity());
recyclerView.setAdapter(adapter2);
adapter2.notifyDataSetChanged();
return v;
}}
您的问题与此行有关:
recyclerView = (RecyclerView) getActivity().findViewById(R.id.bookhistory);
您真的想从您在此行的片段中膨胀的视图中获取 RecyclerView
View v = inflater.inflate(R.layout.fragment_alert, container, false);
所以要解决这个问题,请将我提到的第一行代码更改为
recyclerView = (RecyclerView) v.findViewById(R.id.bookhistory);
这是假设 DialogFragment 包含 bookhistory
显然它会崩溃,因为它没有找到回收器视图实例。
只需替换这一行:
recyclerView = (RecyclerView) getActivity().findViewById(R.id.bookhistory);
搭配:
recyclerView = (RecyclerView) v.findViewById(R.id.bookhistory);
现在它会为你工作。
我正在尝试在 Fragment 内的 DialogFragment 内膨胀 RecyclerView。 我按照指南正常制作了 RecyclerView Adapter。
但是我收到这个错误java.lang.NullPointerException: Attempt to invoke virtual method 'voidandroid.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference
在线
recyclerView.setLayoutManager(manager);
完整代码如下
public class AlertFragment extends DialogFragment {
RecyclerView recyclerView;
RecyclerView.Adapter adapter2;
RecyclerView.LayoutManager manager;
ArrayList<String> goalname = new ArrayList<String>();
ArrayList<String> goalcategory = new ArrayList<String>();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_alert, container, false);
goalname.add("Running");
goalcategory.add("Physical");
goalname.add("Yoga");
goalcategory.add("Physical");
goalname.add("Gym");
goalcategory.add("Physical");
goalname.add("Meditation");
goalcategory.add("Mental");
goalname.add("Puzzle Solving");
goalcategory.add("Habits");
manager = new LinearLayoutManager(getActivity());
recyclerView = (RecyclerView) getActivity().findViewById(R.id.bookhistory);
recyclerView.setLayoutManager(manager);
adapter2 = new GoalListAdapter(goalname, goalcategory,getActivity());
recyclerView.setAdapter(adapter2);
adapter2.notifyDataSetChanged();
return v;
}}
您的问题与此行有关:
recyclerView = (RecyclerView) getActivity().findViewById(R.id.bookhistory);
您真的想从您在此行的片段中膨胀的视图中获取 RecyclerView
View v = inflater.inflate(R.layout.fragment_alert, container, false);
所以要解决这个问题,请将我提到的第一行代码更改为
recyclerView = (RecyclerView) v.findViewById(R.id.bookhistory);
这是假设 DialogFragment 包含 bookhistory
显然它会崩溃,因为它没有找到回收器视图实例。
只需替换这一行:
recyclerView = (RecyclerView) getActivity().findViewById(R.id.bookhistory);
搭配:
recyclerView = (RecyclerView) v.findViewById(R.id.bookhistory);
现在它会为你工作。