0
サーバからデータを取得して解析し、リストに格納しています。私はこのリストをRecyclerViewのアダプターに使用しています。私は断片を使用しています。アダプタの変更時にnotifyDataSetChangedが機能しない
私は
RecyclerView.Adapter<RecyclerView.ViewHolder>
この私の完全なアダプタクラス
public class GridAdapter extends RecyclerView.Adapter<GridAdapter.ViewHolder> {
private List<ProductModel> list;
ItemClickListener itemClickListener;
public GridAdapter(List<ProductModel> list, ItemClickListener itemClickListener) {
this.list = list;
this.itemClickListener = itemClickListener;
}
public void update(int position,ProductModel pm){
Log.v("update adapter",position+"");
list.set(position,pm);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final ProductModel cp = list.get(position);
holder.tvName.setText(cp.name);
holder.tvPrice.setText(cp.price);
holder.ratingBar.setRating(cp.rate);
Log.v("grid",cp.id + "=="+ cp.checked);
if(cp.checked==1){
holder.imgCheck.setVisibility(View.VISIBLE);
}else{
holder.imgCheck.setVisibility(View.GONE);
}
LayerDrawable stars = (LayerDrawable) holder.ratingBar.getProgressDrawable();
stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
holder.lnrItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemClickListener.onItemClick(cp,position);
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView tvName, tvPrice;
ImageView imgMenu, imgCheck;
LinearLayout lnrItem;
RatingBar ratingBar;
public ViewHolder(View itemView) {
super(itemView);
lnrItem = itemView.findViewById(R.id.lnrItem);
imgMenu = itemView.findViewById(R.id.imgMenu);
imgCheck = itemView.findViewById(R.id.imgCheck);
tvName = itemView.findViewById(R.id.tvName);
ratingBar = itemView.findViewById(R.id.ratingBar);
tvPrice = itemView.findViewById(R.id.tvPrice);
}
}
}
とフラグメントの活動に私は私のカスタムアダプタのIで
public void fillListProduct(List<ProductModel> mItems) { //method for load adapter for the first time
mAdapterGrid = new GridAdapter(mItems,this);
recGrid.setAdapter(mAdapterGrid);
}
void update(){ //method to change checked value
mAdapterGrid.update(cp.row,cp);
mAdapterGrid.notifyDataSetChanged();
}
をrecyclerviewするアダプタをロードするには、このコードを使用して拡張3変数を持つid、name、チェック、すべて正常に動作します。最初のロードでをデフォルト値checked
に設定します。シナリオのユーザーはchecked
の値をrecycleviewの行をタップして変更できます。
私の質問は、ユーザーのタップ希望の行が0から1に変わり、それをrecycelviewに表示すると、私はすでにnotifydatasetchange()
を使用していますが、動作しません。
助けてください。 mAdapterGrid.notifyDataSetChanged();
を削除し、特殊なアダプタでこの機能を変更する おかげ
はまだ – ltvie
uは** ** ** ProductModelが更新されたの**リストかどうかを確認しました動作しませんでしたかnotifyItemChanged(position)を呼び出す前にいいえ。 ? –