我在一个类中声明了ArrayList
并在启动Async任务时启动它;然后我在doInBackGround()
方法中添加项目,但之后,当我将数组列表发送到适配器的构造函数时,数组列表的大小仍为0.
我真的不知道我做错了什么。请帮助。
这是我的代码:
public class FindNewThingFragment extends android.support.v4.app.Fragment {
private PullRefreshLayout pullRefreshLayout;
private ProgressBar progressBar;
private ListView listView;
private ArrayList<ThingsItem> arrayList;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_found_new_thing,container,false);
listView=(ListView)view.findViewById(R.id.things_item_list_view);
progressBar=(ProgressBar)view.findViewById(R.id.things_item_progress_bar);
new LoadDongxiData().execute();
ThingsItemListViewAdapter adapter=new ThingsItemListViewAdapter(getActivity(),arrayList);
listView.setAdapter(adapter);
return view;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
private class LoadDongxiData extends AsyncTask<Void,Void,Void> {
public LoadDongxiData(){
arrayList=new ArrayList<ThingsItem>();
}
@Override
protected Void doInBackground(Void... voids) {
doSomething();
for(int i=0;i<10;i++){}
arrayList.add(new ThingsItem(itemImageUrl, itemName, price, userIconUrl, userName, userComment, numberOfLikes, numberOfAddDouToList, numberOfReply, userHomePageLink, itemDetailLink));
}
}
}
}
}
答案 0 :(得分:0)
for(int i=0;i<10;i++){}
这个空循环是故意的还是你试图添加项目的地方?从你的括号缩进的方式来看,它似乎不是故意的。如果这是一个时间延迟,从1到10的计数将花费不到一秒的时间。
设置完数据后,只需在adapter.notifyDataSetChanged()
中拨打onPostExecute()
即可。
您可以在onCreate()
中设置适配器。每次适配器的基础数据发生变化时,请不要忘记调用adapter.notifyDataSetChanged()
。但是,您需要将adapter
设为“全局”变量。
答案 1 :(得分:0)
更改您的代码,
public class FindNewThingFragment extends android.support.v4.app.Fragment {
private PullRefreshLayout pullRefreshLayout;
private ProgressBar progressBar;
private ListView listView;
private ArrayList<ThingsItem> arrayList;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_found_new_thing,container,false);
listView=(ListView)view.findViewById(R.id.things_item_list_view);
progressBar=(ProgressBar)view.findViewById(R.id.things_item_progress_bar);
new LoadDongxiData().execute();
return view;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
private class LoadDongxiData extends AsyncTask<Void,Void,Void> {
public LoadDongxiData(){
arrayList=new ArrayList<ThingsItem>();
}
@Override
protected Void doInBackground(Void... voids) {
doSomething();
for(int i=0;i<10;i++){
arrayList.add(new ThingsItem(itemImageUrl, itemName, price, userIconUrl, userName, userComment, numberOfLikes, numberOfAddDouToList, numberOfReply, userHomePageLink, itemDetailLink));
}
}
protected void onPostExecute(Long result) {
if(arrayList != null && arrayList.size() > 0){
ThingsItemListViewAdapter adapter=new ThingsItemListViewAdapter(getActivity(),arrayList);
listView.setAdapter(adapter);
}
}
}
}
}
}
答案 2 :(得分:0)
将适配器设置为onPostExecute
Asynctask
答案 3 :(得分:0)
请注意,AsyncTask将在后台运行。当它在后台运行时,UI线程将在
之前进入代码的下一行new LoadDongxiData().execute();
这一行完成它的执行下一行将被调用。所以arraylist大小仍为0。
解决方案是你在LoadDongxiData()完成执行后应该有这一行。
ThingsItemListViewAdapter adapter=new ThingsItemListViewAdapter(getActivity(),arrayList);
listView.setAdapter(adapter);
在LoadDongxiData的onPostExecute()方法之后调用这些行。
答案 4 :(得分:0)
尝试将项目添加到列表并在onPostExecute中设置适配器代码:
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
for(int i=0;i<10;i++) {
arrayList.add(new ThingsItem(itemImageUrl, itemName, price, userIconUrl, userName, userComment, numberOfLikes, numberOfAddDouToList, numberOfReply, userHomePageLink, itemDetailLink));
}
ThingsItemListViewAdapter adapter=new ThingsItemListViewAdapter(getActivity(),arrayList);
listView.setAdapter(adapter);
}
答案 5 :(得分:0)
更新你的doInBackground()方法......
protected Void doInBackground(Void... voids) {
doSomething();
for(int i=0;i<10;i++){
arrayList.add(new ThingsItem(itemImageUrl, itemName, price, userIconUrl, userName, userComment, numberOfLikes, numberOfAddDouToList, numberOfReply, userHomePageLink, itemDetailLink));
}
}
}