如何从另一个活动中刷新片段中的ListeView适配器?

时间:2017-06-14 18:48:21

标签: android listview android-fragments adapter

在我的应用中,我有一个名为Fragment的{​​{1}},它使用扩展BaseAdapter的DownloadsFragment类在ListView的指定路径中显示视频。

在我的Custom Adapter的getView()方法中,我调用了CardItems.xml,其中包含一个显示Adapter的按钮,用于从路径中删除视频。

DeleteActivity开始时我按下删除按钮,downloadFragment开始我从中删除活动完成的项目,当我回到DownloadsFragment并滚动listview时出现错误:< / p>

  

ArrayOutOfBoundIndex

(删除的视频的数量)和应用程序崩溃,我的问题是如何在删除活动完成后返回下载碎片时刷新listview。

1 个答案:

答案 0 :(得分:1)

我做了一些非常相似的事情,但我不确定这有多干净:

DownloadsFragment中创建全局Fragment

public static Fragment myFragment;

onCreate的{​​{1}}中:

Fragment

然后在@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); myFragment = this; } 或您想要刷新Activity的任何地方,执行以下操作:

DownloadsFragment

<强>更新

或者在Fragment frg = DownloadsFragment.myFragment; if (frg != null) { getSupportFragmentManager().beginTransaction().detach(frg).commitAllowingStateLoss(); getSupportFragmentManager().beginTransaction().attach(frg).commitAllowingStateLoss(); } 中创建方法:

Fragment

无论您想要在哪里刷新public void refreshFragment() { getActivity().getSupportFragmentManager().beginTransaction().detach(this).commitAllowingStateLoss(); getActivity().getSupportFragmentManager().beginTransaction().attach(this).commitAllowingStateLoss(); //adapter.notifyDataSetChanged(); } ,请执行以下操作:

Fragment

或者将该方法设为静态并致电:(我不确定这是否有效。您必须亲自测试)

DownloadsFragment f = (DownloadsFragment) DownloadsFragment.myFragment;
f.getFragmentManager().findFragmentByTag("Your Fragment Tag");
   if (f!= null) {
      f.refreshFragment();
}