我有一个带有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);
}
重点是简单地破坏片段,因为必须从屏幕上清除所有数据,然后重新创建它,以便用户可以向其中添加新数据
我希望这很清楚,谢谢您的帮助
我找到了很多答案,但是从来没有真正想要的东西
答案 0 :(得分:0)
您可以覆盖片段中的setUserVisibleHint方法,以检测何时可见。可以在此方法内刷新数据。选择pageradapter的项目以编程方式触发当前片段的setUserVisibleHint。您无需每次都销毁碎片。