如何从Asynctask刷新ListFragment?

时间:2014-01-18 14:04:43

标签: android android-asynctask actionbarsherlock android-listfragment

我正在尝试在Asynctask完成后刷新ListFragment。在我的Asynctask doInBackground方法中,我连接到数据库并将元素添加到ArrayList。在onPostExecute方法中,我想通过类似的方式访问我的ListFragment来调用它的refreshData(方法):

    //REFRESH ARTISTFRAGMENT
@Override
public void onPostExecute(ArrayList<String> result) {

    ArtistFragment artistFrag = new ArtistFragment();
    artistFrag = (ArtistFragment) artistFrag.getSherlockActivity().getSupportFragmentManager().findFragmentById(R.id.frame_container);
    if (artistFrag != null) {
        artistFrag.refreshData(result);
    }
}

但getSupportFragmentManager导致NullPointerException!

我的Fragment中的refreshData方法如下所示:

    public void refreshData(ArrayList<String> data) {
       artists = new ArrayList<String>(data);
       this.artistAdpater.notifyDataSetChanged();
    }

我发现了非常类似的方法来完成我想要的确切事情,但我无法找到解决问题的方法。基本上它是在https://stackoverflow.com/a/16388650完成的 - 但它对我来说并不适用。

有人为此解决方案或解决方法吗?

1 个答案:

答案 0 :(得分:0)

我假设艺术家是提供列表视图的数组列表。

 artists = new ArrayList<String>(data);

您正在做的是为艺术家创建一个新的arraylist对象引用。但列表适配器具有较旧的参考。这就是为什么列表没有得到更新。

您可以将其添加到旧的arraylist中,而不是传递新arraylist的引用:

newArtistsArraylist = new ArrayList<String>(data);
artists .add(newArtistsArraylist );

Here is a nice solution to your problem.