Android - ListFragment 中的上下文在其他活动中从 AsyncTask 调用时不起作用



我想刷新ListFragmentList。因此,我在ListFragment中创建了一个方法:

public void setAdapter(List<String> valueList) {
    ArrayAdapter adapter = new ArrayAdapter<String>(ctx, android.R.layout.simple_list_item_1, valueList);
    setListAdapter(adapter);
    adapter.notifyDataSetChanged();
}

在我的Activity中,我有一个AsyncTask,我在onPostExecute中调用上述方法:

    @Override
    protected void onPostExecute(ArrayList<String> valueList) {
        OtherClass otherClasst = new OtherClass();
        otherclass.setAdapter(valueList);
    }

一切都应该正常工作。valueList不是空的或类似的东西,onPostExecute也被调用。

所以现在我的问题是,如果我在ListFragmentonCreate方法中初始化Context ctx,我会得到一个NullPointerException.当我用ctx = getActivitysetAdapter方法中初始化它时,我得到了同样的错误。我唯一能做的就是用AsyncTask获取类的context,但是应用程序中没有显示任何内容。

那么我该如何让它工作呢?

由于您是从AsyncTask onPostExecute调用setAdapter,那么您的activity可能已被破坏,这可能就是您通过调用getActivity来获取null上下文的原因。

setAdapter之外初始化adapter(使其全局),可能是onCreateView Fragment的方法如下:

adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, valueList);

onPostExecute AsyncTask只是更新valueList并致电adapter.notifyDataSetChanged()

最新更新