为了账号安全,请及时绑定邮箱和手机立即绑定

我的 RecyclerView 不更新(有时)

我的 RecyclerView 不更新(有时)

慕娘9325324 2023-04-26 14:50:04
我有一个选项卡式活动。每个片段中都有一个 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 每次都会更新。
查看完整描述

4 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

使用 Hussain answer 并使用此代码获取您的片段内部onPageSelected方法

Fragment fragment = (Fragment) adaper.instantiateItem(mViewPager, position);


查看完整回答
反对 回复 2023-04-26
?
HUWWW

TA贡献1874条经验 获得超12个赞

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


查看完整回答
反对 回复 2023-04-26
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

Soo,我找到了解决方案,当然我的问题出在其他地方。非常抱歉耽误了您的时间,感谢您的努力!

问题是我将新的 Day 对象添加到我的列表中而没有在onCreateView调用时删除旧的对象,因此新的、更新的数据根本没有显示。


查看完整回答
反对 回复 2023-04-26
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

实现ViewPager.OnPageChangeListener然后更新里面的fragment


public 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) {}

}


查看完整回答
反对 回复 2023-04-26
  • 4 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信