我有一个选项卡式活动。每个片段中都有一个RecyclerView。
如果滚动到其他片段然后再返回,我的RecyclerView将不会更新。如果我只是启动该应用程序,它将起作用。为了更新我的RecyclerView,我更改了例如Driffrent活动中的名称,并在另一个类中调用了一个方法来更新我的RecyclerView,这有时仅起作用。
当您退出活动以更改数据并返回到片段时,我还尝试更新整个片段(在onResume()
中)。
我发现问题只在第二次调用该片段的onCreateView
时才出现。
这是我的Fragment类:
public static class DayFragment extends Fragment {
private static final String SECTION_NUMBER = "section_number";
public DayFragment() {
}
public static DayFragment newInstance(int sectionNumber) {
DayFragment fragment = new DayFragment();
Bundle args = new Bundle();
args.putInt(SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
Day day = new Day(getArguments().getInt(SECTION_NUMBER, 0) - 1, rootView, getContext(), getContext().getFilesDir());
MainActivity.DAYS.add(day);
day.createList();
System.out.println("CREATED" + (getArguments().getInt(SECTION_NUMBER, 0) - 1));
return rootView;
}
}
设置列表:
public void createList() {
dayList = day.findViewById(R.id.dayList); // day is the rootView of the fragment passed on to this object of a class
lessonsAdapter = new LessonListAdapter();
dayList.setAdapter(lessonsAdapter);
dayList.setLayoutManager(new LinearLayoutManager(context) {
@Override
public boolean canScrollVertically() {
return false;
}
});
dayList.addItemDecoration(new MarginItemDecoration(context));
}
更新我的RecyclerView(在普通的Java类中):
public void update() {
data.clear();
//if(lessonsAdapter != null) {
// lessonsAdapter.notifyDataSetChanged();
//}
data.addAll(newData);
lessonsAdapter.notifyDataSetChanged();
}
因此,请告诉我我需要做什么,以便我的RecyclerView每次都会更新。
最佳答案
每次更改片段时,都必须重新设置适配器,您可以在onResume上进行操作。尝试这样的事情:
private void initAdapter(){
lessonsAdapter = new LessonListAdapter();
dayList.setAdapter(lessonsAdapter);
dayList.setLayoutManager(new LinearLayoutManager(context) {
@Override
public boolean canScrollVertically() {
return false;
}
});
dayList.addItemDecoration(new MarginItemDecoration(context));
}
@Override
public void onResume() { initAdapter(); }
关于java - 我的RecyclerView不更新(有时),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57235723/