[英]Changing gridview item outside adapter
我已經使用https://developer.android.com/reference/android/support/v17/leanback/widget/HorizontalGridView.html創建了一個水平gridview
我的gridview包含一個imageview。 我想要當用戶單擊屏幕上的按鈕(該按鈕不在griview中)時,gridview中的特定圖像被更改。 我努力了
adapter.notifyDataSetChanged()
但它不起作用。這是我的代碼:
public class GridElementAdapter extends RecyclerView.Adapter<GridElementAdapter.SimpleViewHolder>{
private Context context;
public static ArrayList<File> elements;
public static int mPosition=0;
public GridElementAdapter(Context context, ArrayList<File> file){
this.context = context;
this.elements = file;
}
public static class SimpleViewHolder extends RecyclerView.ViewHolder {
ImageView button;
ImageView cancel;
public SimpleViewHolder(View view) {
super(view);
button = (ImageView) view.findViewById(R.id.imageView2);
cancel = (ImageView) view.findViewById(R.id.check);
}
}
@Override
public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View view = LayoutInflater.from(this.context).inflate(R.layout.grid_element, parent, false);
return new SimpleViewHolder(view);
}
@Override
public void onBindViewHolder(final SimpleViewHolder holder, final int position) {
Glide.with(context).load(elements.get(position).toString()).into(holder.button);
holder.cancel.setImageResource(R.drawable.cancell);
holder.cancel.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
elements.remove(position);
notifyDataSetChanged();
}
});
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mPosition=position;
Glide.with(context).load(elements.get(position).toString()).into(holder.button);
}
});
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemCount() {
return this.elements.size();
}
}
這是mainActivity中必須通知適配器的函數。
public void save_image(View v) throws IOException {
File file = new File(new_name);
GridElementAdapter.elements.remove(GridElementAdapter.mPosition);
GridElementAdapter.elements.add(GridElementAdapter.mPosition, file);
View v1=new View(context);
v1 = horizontalGridView.getChildAt(GridElementAdapter.mPosition);
ImageView someText = (ImageView) v1.findViewById(R.id.imageView2);
Glide.with(this).load(GridElementAdapter.elements.get(GridElementAdapter.mPosition)).into(someText);
adapter.notifyDataSetChanged();
}
我已經嘗試過此解決方案,但無法正常工作。 在適配器外部更改gridVIew的imageView
適配器的elements
屬性應該是一個實例變量。
因此,代替public static ArrayList<File> elements;
它應該是public ArrayList<File> elements;
然后在您的save_image
方法中使用
adapter.elements.remove(GridElementAdapter.mPosition);
adapter.elements.add(GridElementAdapter.mPosition, file);
代替:
GridElementAdapter.elements.remove(GridElementAdapter.mPosition);
GridElementAdapter.elements.add(GridElementAdapter.mPosition, file);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.