У меня есть просмотр списка, который заполняется строками, которые получают свои данные с веб-сервера. Все работает отлично, за исключением того, что я хочу иметь кнопку обновления для повторной загрузки данных. Я получаю данные через 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