我有MenuActivity,它有RecyclerView和ViewPager。此ViewPager有3个页面,使用三个不同的片段。 FragmentOne,FragmentTwo,FragmentThree,所有这些片段都使用RecyclerView数据。 我想在RecyclerView Adapter中使用三个不同的ArrayList,这取决于Fragment用户正在查看什么。 一种解决方案是将RecyclerView放在所有三个片段中,并在Fragment中获取更新数据。我只是想知道是否可以根据调用的Fragment在MenuActivity中设置适配器数据。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_menu, container, false);
recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);
itemList = new ArrayList<>();
prepareMenuData();
vegadapter = new MenuItemAdapter(getContext(),vegItemList);
nonvegadapter = new MenuItemAdapter(getContext(),nonvegItemList);
dessertAdapter = new MenuItemAdapter(getContext(),dessertItemList);
recyclerView.setAdapter(vegadapter);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
return rootView;
}
prepareMenuData();
for (MenuItem item:itemList)
{
if(item.getCategory().equals("VEG"))
{
vegItemList.add(item);
vegadapter.notifyDataSetChanged();
}
if(item.getCategory().equals("NONVEG"))
{
nonvegItemList.add(item);
nonvegadapter.notifyDataSetChanged();
}
if(item.getCategory().equals("DESSERTVEG"))
{
dessertItemList.add(item);
dessertAdapter.notifyDataSetChanged();
}
}
此代码不知道何时设置vegadapter,nonvegadapter等。 请建议。 谢谢 迪帕克
答案 0 :(得分:1)
技术上是的,你可以,但这是否是一个好的做法是另一个问题。
您必须在每个片段中都有RecyclerView,但您可以从Activity获取适配器的数据。片段可以访问他们的Activity,这就是Android生命周期的工作方式,因此可以从Fragment调用((MenuActivity) getActivity()).getMenuList();
,然后将结果传递给Fragments适配器。然而,这将把片段与活动结合起来,这不是一个好习惯。
鉴于您的数据看起来不是动态的,我个人会做的是让您的MenuItem类实现Parcelable,然后当您创建Fragments时,您可以通过MenuItems的ArrayList作为参数,这样你的片段与您的活动无关。