刷新列表视图
我有一个列表视图,该视图由从Web服务器获取其数据的行填充。除了我希望有一个刷新按钮来重新下载数据外,它全部正常工作。我通过asynctask(在doinbackground中获取数据)获取数据,然后在onpostexecute中设置listadapter。我所做的只是运行应该照顾一切的asynctask运行刷新列表视图
new PopulateListTask()。execute();
但是,在我的optionsSelect方法中,创建一个新的asynctask就像我在oncreate中做的一样,不会做任何事情。它甚至不会进入doInBackground。我试过使用listView.invalidate()和listView.invalidateViews()。是否有一些特殊的方式可以重新填充listview?
我唯一的猜测是,因为我使用的是自定义适配器,所以我的getView方法正在创建某种错误,但这并不能解释为什么它甚至没有进入我的asynctask的doInBackground方法。思考?
编辑:张贴一些代码。这是一个修剪版本。
`
private class PopulateListTask extends AsyncTask<Void, Void, ArrayList<Quote>>{
@Override
protected ArrayList<Quote> doInBackground(Void... params) {
quotes = Helper.getQuotes();
return quotes;
}
@Override
protected void onPostExecute(ArrayList<Quote> quotes){
setListAdapter(new QuoteAdapter(ctx,R.layout.quote_row,quotes));
}
}
private class QuoteAdapter extends ArrayAdapter<Quote>{
ArrayList<Quote> items;
int resource;
public QuoteAdapter(Context context, int textViewResourceId, ArrayList<Quote> items){
super(context, textViewResourceId, items);
this.items = items;
this.resource = textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(resource,null);
// do stuff with v
return v;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case(MENU_REFRESH):
new PopulateListTask().execute();
}
`
好希望这个作品,对不起,我还没有完全确定的最佳方式输入代码。
EDIT2:
执行我的AsyncTask的第二次时,我得到这个在我的logcat中。任何想法是什么意思?我尝试了谷歌搜索无济于事。
W/InputManagerService(52):窗口已经集中,忽视聚焦增益的:[email protected]
错误是在创造我的选择子菜单。我有
menu.addSubMenu(MENU_REFRESH,0,0, “刷新”); isntead
menu.addSubMenu的
(0,MENU_REFRESH,0, “刷新”);
发布自定义适配器的代码,任务和刷新按钮的onClick。 – 2010-07-07 02:17:17
放入一些代码。我被告知要调用notifydatasetchanged和notifydatanull或其他方法。但我没有真正添加到数组然后重新填充,我想完全销毁列表视图并从头开始重做 – Falmarri 2010-07-07 02:35:29