Android ListFragment 无法从异步任务填充



我已经把头撞在墙上大约一天了。我希望有人能帮忙。

我的程序将一些 Json 加载并解析为异步任务中的对象数组。这个异步任务是从我的ListFragment类调用的,数据在onPostExecute中发送回。不会引发任何错误,列表加载动画将按预期消失。但无论我做什么,列表都不会填充。

我肯定会正确返回和解析数据,并且我尝试在onPostExecute中使用简单的数组和适配器,以确保它不是我的适配器类并且它仍然不起作用。

我将下面的代码简化为一个示例。下面的代码等待 1 秒,然后删除加载动画。但不填充列表。如果您从doInBackground方法中删除睡眠,则可以完美运行。

public class MyFragment extends ListFragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    AsyncTask<Void, Void, String> task = new AsyncTask<Void,Void,String>()
            {
                @Override
                protected String doInBackground(Void... params) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    return null;
                }
                @Override
                protected void onPostExecute(String result) {               
                    String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
                              "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
                              "Linux", "OS/2" };
                    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
                              android.R.layout.simple_list_item_1, android.R.id.text1, values);
                    setListAdapter(adapter);
                }           
     };
     task.execute();
}
}

正如我所说,如果您删除我用来模拟 json 加载的 Thread.sleep(1000),它可以正常工作。

如果有任何不同,我正在使用 2.3 的片段支持库。

谢谢史蒂夫

试试

MyFragment.this.setListAdapter(adapter);

编辑:

你好

我已经尝试过您的代码,甚至通过以下方式加载视图

    mLoadedFragment = new MyFragment();
    transaction.replace(R.id.relativeLayout, mLoadedFragment);
    transaction.commit();

它对我来说工作正常,麻烦的唯一可能原因应该是:加载片段时视图不可见,或者一些类似的问题。

您可能需要检查要加载片段的布局。

最新更新