Обновление списка - PullRequest
       19

Обновление списка

1 голос
/ 07 июля 2010

У меня есть просмотр списка, который заполняется строками, которые получают свои данные с веб-сервера. Все работает отлично, за исключением того, что я хочу иметь кнопку обновления для повторной загрузки данных. Я получаю данные через asynctask (получение данных в doinbackground) и затем устанавливаю listadapter в onpostexecute. Все, что я делаю, чтобы запустить asynctask, которая должна обо всем позаботиться, это запустить

new PopulateListTask (). Execute ();

Однако в моем методе optionsSelect создание новой асинхронной задачи, как я это делал в oncreate, ничего не делает. Он даже не входит в doInBackground. Я пытался использовать listView.invalidate () и listView.invalidateViews (). Есть ли какой-то особенный способ, которым я должен населить просмотр списка?

Мое единственное предположение состоит в том, что, поскольку я использую пользовательский адаптер, мой метод getView создает какую-то ошибку, но это не объясняет, почему он даже не входит в метод doInBackground моей asynctask. Мысли?

Редактировать: отправка кода. Это урезанная версия.

`

 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:

Я получаю это в своем logcat при выполнении моей асинктической задачи во второй раз. Есть идеи, что это значит? Я попытался прибегнуть к помощи, но безрезультатно.

W / InputManagerService (52): окно уже сфокусировано, игнорируя усиление фокуса: com.android.internal.view.IInputMethodClient$Stub$Proxy@43b9dee8

1 Ответ

0 голосов
/ 07 июля 2010

Ошибка при создании моих опций subMenu. У меня было

menu.addSubMenu (MENU_REFRESH, 0, 0, «Обновить»);

вместо

menu.addSubMenu (0, MENU_REFRESH, 0, «Обновить»);

...