0

我想在Asynctask完成后刷新ListFragment。在我的Asynctask doInBackground方法中,我连接到数据库并将元素添加到ArrayList。在onPostExecute方法我想的东西进入我的ListFragment这样称呼它是refreshData(方法):如何从Asynctask刷新ListFragment?

//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导致空指针异常!在我的片段

的refreshData方法是这样的:

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

我发现非常类似的方法做我想要的确切的事情,但我不能找到一个解决我的问题。基本上它在这里完成https://stackoverflow.com/a/16388650 - 但它不适合我这样的工作。

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

+0

我的一个朋友找到了一个简单的解决方法。他在AsyncTask中实现了一个构造函数。当实例化并执行AsyncTask移交片段时。 – f4b

回答

0

我假设艺术家是供给您的listview的数组列表。

artists = new ArrayList<String>(data); 

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

不是传递新的ArrayList的参考,你可以把它添加到旧的,像这样:

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

Here is a nice solution to your problem.

+0

谢谢,这可能是问题的一部分,但我甚至没有得到这么远,因为由'getSupportFragmentManager()'引起的NullPointerException异常' 在您提供的链接中,旧适配器被新的覆盖。但用新值和'notifyDataSetChanged()'刷新它会不会更好? – f4b

+0

现在检查答案。 – amalBit

+0

好吧,我改变了这一点,但我无法调用函数refreshData(),因为我无法访问我的片段的实例来调用它。你有没有想法如何调用它或如何解决NullPointerExc.-问题? – f4b