【发布时间】:2019-06-25 11:15:44
【问题描述】:
我有一个带有 2 个片段的选项卡布局,我有一个工具栏,其中包含不同的选项,这些选项属于托管视图寻呼机的活动。
当我单击工具栏选项时,它会清除片段中使用的数据库中的数据,然后它应该刷新它以在屏幕上应用更改。
但我找不到从活动中刷新片段的方法。
这里是片段适配器:
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);
}
关键是简单地销毁片段,因为必须从屏幕上清除所有数据,然后重新创建它,以便用户可以向其中添加新数据
我希望这很清楚,谢谢你的帮助
我找到了很多答案,但从未找到我真正想要的答案
【问题讨论】:
-
从数据库中删除数据后,调用 notifydatasetchanged 或再次为 viewpager 设置适配器。
-
我这样做了:DatabaseAgenda.getInstance(this).dropDB(); mviewpager.setAdapter(FragAdapter); mtablayout.setupWithViewPager(mviewpager); mtablayout.getTabAt(1).select();谢谢
标签: android android-fragments android-tablayout