Androidで更新されたlistViewを取得できません。私はlistViewを持つフラグメントを持っていて、そのアイテムはREST呼び出しによって返されます。ここで更新リスト内のフラグメントの表示
が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の中で初めて呼び出すときに機能します。 問題は、私はリストを毎回選択ピザ屋の変更を更新する必要が、あるので、私はこの方法を書いた:リストである以外、方法が正しくAsyncTaskを呼び出し、私はすべてのエラーを取得していないことを
public void updatePizzeriaMenu(String idPizzeria) {
GetMenuPizzeria getMenuPizzeria = new GetMenuPizzeria(new ContentAdapter(recyclerView.getContext()), this.getContext(), idPizzeria);
getMenuPizzeria.execute();
}
を(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();
}
}
アダプタークラスを投稿することができます –