猿问

我的 RecyclerView 不更新(有时)

我有一个选项卡式活动。每个片段中都有一个 RecyclerView。例如,如果滚动到其他片段并返回,我的 RecyclerView 将不会更新。如果我只是启动应用程序,它就可以工作。为了更新我的 RecyclerView,我更改了例如 driffrent 活动中的名称,并在不同的类中调用了一个方法来更新我的 RecyclerView,这只是有时有效。


onResume()当您退出活动以更改数据并返回到片段时,我还尝试更新整个片段(在 中)。


我发现问题只在onCreateView片段被第二次调用时才会出现。


这是我的片段类:


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 每次都会更新。


慕娘9325324
浏览 178回答 4
4回答

慕田峪9158850

使用 Hussain answer 并使用此代码获取您的片段内部onPageSelected方法Fragment fragment = (Fragment) adaper.instantiateItem(mViewPager, position);

HUWWW

每次更改片段时都必须再次设置适配器,可以在 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(); }

阿波罗的战车

Soo,我找到了解决方案,当然我的问题出在其他地方。非常抱歉耽误了您的时间,感谢您的努力!问题是我将新的 Day 对象添加到我的列表中而没有在onCreateView调用时删除旧的对象,因此新的、更新的数据根本没有显示。

拉丁的传说

实现ViewPager.OnPageChangeListener然后更新里面的fragmentpublic class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {    ...     ...    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        ...        ...        viewPager.addOnPageChangeListener(this);        ...        ...    }    @Override    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}    @Override    public void onPageSelected(int position) {        Fragment fragment = adapter.getFragment(position);        if (fragment != null) {            // Update fragment here        }    }    @Override    public void onPageScrollStateChanged(int state) {}}
随时随地看视频慕课网APP

相关分类

Java
我要回答