Android ListFragment无法从异步任务填充

时间:2013-01-22 12:36:05

标签: android android-asynctask fragment

我一直在这上面撞墙挡了大约一天。我希望有人可以提供帮助。

我的程序加载并将一些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,如果这有任何区别。

由于 史蒂夫

1 个答案:

答案 0 :(得分:1)

尝试

MyFragment.this.setListAdapter(适配器);

编辑:

您好,

我已尝试过您的代码,甚至通过

加载视图
    mLoadedFragment = new MyFragment();
    transaction.replace(R.id.relativeLayout, mLoadedFragment);
    transaction.commit();

它对我来说很好,唯一可能的原因应该是:在加载片段时看不到视图,或类似的问题。

您可能想要检查意图加载片段的布局。