亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我的 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 關注
  • 237 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號