单击时从选项卡布局刷新片段

时间:2019-06-25 11:15:44

标签: android android-fragments android-tablayout

我有一个带有2个片段的选项卡布局,并且我有一个带有不同选项的工具栏,这些选项属于承载视图分页器的活动。

当我单击工具栏选项时,它将清除片段中使用的DB中的数据,然后应刷新它以在屏幕上应用更改。

但是我找不到从活动中刷新片段的方法。

这是片段适配器:

 public class FragmentAdapter extends FragmentPagerAdapter


{

    private final List<Fragment>  lstFragment = new ArrayList<>();
    private final List<String> lstTitles = new ArrayList<>();

    public FragmentAdapter(FragmentManager fm) {
        super(fm);
    }


    @Override
    public Fragment getItem(int i) {
        return lstFragment.get(i);
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return lstTitles.get(position);
    }

    @Override
    public int getCount() {
        return  lstTitles.size();
    }


    public void AddFragment (Fragment fragment , String title)
    {
        lstFragment.add(fragment);
        lstTitles.add(title);
    }

}

这是我在main的片段中称呼它的方式:

      FragAdapter = new FragmentAdapter(getSupportFragmentManager());

    ((FragmentAdapter) FragAdapter).AddFragment(new FragmentProgramme(),"Programmes");
    ((FragmentAdapter) FragAdapter).AddFragment(new FragmentPlanning(),"Agenda"); //FRAGMENT I WANT TO REFRESH

    mviewpager.setAdapter(FragAdapter);
    mtablayout = (TabLayout) findViewById(R.id.main_tabs);
    mtablayout.setupWithViewPager(mviewpager);

主要,我在工具栏上有一个选项,我想这样做:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int pos = item.getItemId();
        switch (pos)
        {       
                DatabaseAgenda.getInstance(this).dropDB(); //CLEAN DB
                // I would like to find a function like this : ((FragmentAdapter) FragAdapter).refresh(FragmentPlanning, "Agenda");

                break;
        }

        return super.onOptionsItemSelected(item);
    }

重点是简单地破坏片段,因为必须从屏幕上清除所有数据,然后重新创建它,以便用户可以向其中添加新数据

我希望这很清楚,谢谢您的帮助

我找到了很多答案,但是从来没有真正想要的东西

1 个答案:

答案 0 :(得分:0)

您可以覆盖片段中的setUserVisibleHint方法,以检测何时可见。可以在此方法内刷新数据。选择pageradapter的项目以编程方式触发当前片段的setUserVisibleHint。您无需每次都销毁碎片。