我一直在这上面撞墙挡了大约一天。我希望有人可以提供帮助。
我的程序加载并将一些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,如果这有任何区别。
由于 史蒂夫
答案 0 :(得分:1)
尝试
MyFragment.this.setListAdapter(适配器);
编辑:
您好,
我已尝试过您的代码,甚至通过
加载视图 mLoadedFragment = new MyFragment();
transaction.replace(R.id.relativeLayout, mLoadedFragment);
transaction.commit();
它对我来说很好,唯一可能的原因应该是:在加载片段时看不到视图,或类似的问题。
您可能想要检查意图加载片段的布局。