刷新列表视图

时间:2010-07-07 01:55:15

标签: android listview views refresh listadapter

我有一个listview,它由从Web服务器获取数据的行填充。这一切都很好,除了我想有一个刷新按钮重新下载数据。我通过asynctask获取数据(在doinbackground中获取数据),然后在onpostexecute中设置listadapter。我所做的只是运行asynctask,它应该处理所有事情

  

new PopulateListTask()。execute();

但是,在我的optionsSelect方法中,就像我在oncreate中所做的那样创建一个新的asynctask并没有做任何事情。它甚至没有输入doInBackground。我已经尝试使用listView.invalidate()和listView.invalidateViews()。是否有一些特殊方式我应该重新填充列表视图?

我唯一的猜测是,因为我正在使用自定义适配器,我的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):窗口已经聚焦,忽略焦点增益:com.android.internal.view.IInputMethodClient$Stub$Proxy@43b9dee8

1 个答案:

答案 0 :(得分:0)

错误在于创建我的选项subMenu。我有

  

menu.addSubMenu(MENU_REFRESH,0,0,“刷新”);

不是

  

menu.addSubMenu(0,MENU_REFRESH,0,“刷新”);