Android 如何从另一个活动中刷新片段中的ListView适配器?
在我的应用程序中,我有一个名为Android 如何从另一个活动中刷新片段中的ListView适配器?,android,listview,android-fragments,adapter,Android,Listview,Android Fragments,Adapter,在我的应用程序中,我有一个名为DownloadsFragment的片段,它使用扩展BaseAdapter的自定义适配器类,在列表视图中以指定路径显示视频 在我的适配器的getView()方法中,我调用CardItems.xml,它包含一个显示DeleteActivity的按钮,以从路径中删除视频 当downloadFragmentstart我按下删除按钮时,DeleteActivitystart我从中删除该项目,活动完成,当我返回DownloadsFragment并滚动列表视图时,我得到一个错误
DownloadsFragment
的片段,它使用扩展BaseAdapter的自定义适配器
类,在列表视图中以指定路径显示视频
在我的适配器的getView()方法中,我调用CardItems.xml,它包含一个显示DeleteActivity
的按钮,以从路径中删除视频
当downloadFragment
start我按下删除按钮时,DeleteActivity
start我从中删除该项目,活动完成,当我返回DownloadsFragment并滚动列表视图时,我得到一个错误:
边界索引的排列
(已删除视频的数量)和应用程序崩溃,我的问题是如何在删除活动完成并返回下载片段后从删除活动中刷新listview。我做了类似的事情,但我不确定这有多干净:
在DownloadsFragment
中创建一个全局片段
:
public static Fragment myFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myFragment = this;
}
public void refreshFragment() {
getActivity().getSupportFragmentManager().beginTransaction().detach(this).commitAllowingStateLoss();
getActivity().getSupportFragmentManager().beginTransaction().attach(this).commitAllowingStateLoss();
//adapter.notifyDataSetChanged();
}
在onCreate
的片段中:
public static Fragment myFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myFragment = this;
}
public void refreshFragment() {
getActivity().getSupportFragmentManager().beginTransaction().detach(this).commitAllowingStateLoss();
getActivity().getSupportFragmentManager().beginTransaction().attach(this).commitAllowingStateLoss();
//adapter.notifyDataSetChanged();
}
然后在您的活动
中或您想刷新下载片段
的任何地方,执行以下操作:
Fragment frg = DownloadsFragment.myFragment;
if (frg != null) {
getSupportFragmentManager().beginTransaction().detach(frg).commitAllowingStateLoss();
getSupportFragmentManager().beginTransaction().attach(frg).commitAllowingStateLoss();
}
DownloadsFragment f = (DownloadsFragment) DownloadsFragment.myFragment;
f.getFragmentManager().findFragmentByTag("Your Fragment Tag");
if (f!= null) {
f.refreshFragment();
}
更新
或者在片段中创建一个方法:
public static Fragment myFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myFragment = this;
}
public void refreshFragment() {
getActivity().getSupportFragmentManager().beginTransaction().detach(this).commitAllowingStateLoss();
getActivity().getSupportFragmentManager().beginTransaction().attach(this).commitAllowingStateLoss();
//adapter.notifyDataSetChanged();
}
无论您想在哪里刷新片段
,请执行以下操作:
Fragment frg = DownloadsFragment.myFragment;
if (frg != null) {
getSupportFragmentManager().beginTransaction().detach(frg).commitAllowingStateLoss();
getSupportFragmentManager().beginTransaction().attach(frg).commitAllowingStateLoss();
}
DownloadsFragment f = (DownloadsFragment) DownloadsFragment.myFragment;
f.getFragmentManager().findFragmentByTag("Your Fragment Tag");
if (f!= null) {
f.refreshFragment();
}
或者将该方法设置为静态并调用:(我不确定这是否有效。您必须自己测试它)
很高兴听到这个消息。别忘了接受解决您问题的答案。对我来说,几乎忘了在onCreate()中分配片段。