我已经把头撞在墙上大约一天了。我希望有人能帮忙。
我的程序将一些 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();
它对我来说工作正常,麻烦的唯一可能原因应该是:加载片段时视图不可见,或者一些类似的问题。
您可能需要检查要加载片段的布局。