我無法獲取Android上更新的listView。我有一個listView的片段,其項目由REST調用返回。Android中的片段更新列表視圖
這裏是的AsyncTask:
private class GetMenuPizzeria extends AsyncTask<String, Void, Object[]> {
private final SelectPizzaFragment.ContentAdapter mListAdapter;
private final Context appContext;
private final String pizzeriaId;
private GetMenuPizzeria(ContentAdapter mListAdapter, Context appContext, String id) {
this.mListAdapter = mListAdapter;
this.appContext = appContext;
this.pizzeriaId = id;
}
@Override
protected Object[] doInBackground(String... params) {
return pizzeriaManager.getMenuPizzeria(pizzeriaId).toArray();
}
@Override
protected void onPostExecute(Object[] result) {
mListAdapter.updateItems(result, appContext);
}
}
,這裏是被稱爲onPostExecute功能(updateItems):
public void updateItems(Object[] newItems, Context appContext) {
PizzaMenu pm;
lPizzaNames.clear();
lPizzaDesc.clear();
lPizzaPrices.clear();
Resources resources = appContext.getResources();
TypedArray a = resources.obtainTypedArray(R.array.place_avator);
for (int i = 0; i < newItems.length; i++) {
pm = (PizzaMenu) newItems[i];
lPizzaNames.add(pm.getName());
lPizzaDesc.add(pm.getIngredients());
lPizzaPrices.add(pm.getPrice());
lPlaceAvators.add(a.getDrawable(0));
}
this.notifyDataSetChanged();
}
然後,我打電話的AsyncTask這樣的:
GetMenuPizzeria getMenuPizzeria = new GetMenuPizzeria(adapter, this.getContext(), id);
getMenuPizzeria.execute();
當我第一次在我的片段的onCreateView中調用它時,它就起作用了。 問題是,我每次都選擇比薩店變化更新列表,所以我寫了一個方法:
public void updatePizzeriaMenu(String idPizzeria) {
GetMenuPizzeria getMenuPizzeria = new GetMenuPizzeria(new ContentAdapter(recyclerView.getContext()), this.getContext(), idPizzeria);
getMenuPizzeria.execute();
}
該方法正確調用的AsyncTask,我沒有得到任何錯誤,除了名單未更新(但調用notifyDataSetChanged()並調用onBindViewHolder)。我想我正在檢索適配器的方式是錯誤的或類似的東西,因爲看起來像我每次打電話updatePizzeriaMenu是我填充的列表是空的。有人能幫助我,告訴我我錯過了什麼嗎?在此先感謝
編輯:這裏是我的適配器類:
public static class ContentAdapter extends RecyclerView.Adapter<ViewHolder> {
private final List<String> lPizzaNames = new ArrayList<String>();
private final List<String> lPizzaDesc = new ArrayList<String>();
private final List<String> lPizzaPrices = new ArrayList<String>();
private final List<Drawable> lPlaceAvators = new ArrayList<Drawable>();
public ContentAdapter(Context context) {
Resources resources = context.getResources();
TypedArray a = resources.obtainTypedArray(R.array.place_avator);
a.recycle();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()), parent);
}
public void updateItems(Object[] newItems, Context appContext) {
//see above....
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.avator.setImageDrawable(lPizzaAvators.get(position % lPizzaAvators.size()));
holder.name.setText(lPizzaNames.get(position % lPizzaNames.size()));
holder.description.setText(lPizzaDesc.get(position % lPizzaDesc.size()));
holder.price.setText(lPizzaPrices.get(position % lPizzaPrices.size()));
}
@Override
public int getItemCount() {
return lPizzaPrices.size();
}
}
你可以發表你的適配器類 –