我正在尝试在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完成的 - 但它对我来说并不适用。
有人为此解决方案或解决方法吗?
答案 0 :(得分:0)
我假设艺术家是提供列表视图的数组列表。
artists = new ArrayList<String>(data);
您正在做的是为艺术家创建一个新的arraylist对象引用。但列表适配器具有较旧的参考。这就是为什么列表没有得到更新。
您可以将其添加到旧的arraylist中,而不是传递新arraylist的引用:
newArtistsArraylist = new ArrayList<String>(data);
artists .add(newArtistsArraylist );