首页 > 解决方案 > 在我的适配器中,我无法更改 onClickListener 中的定义值

问题描述

在我的适配器中,我遇到的问题是,如果我在 onClickListener 之前定义了一个字符串,我以后无法在 onClickListener 中更改它。我可以将它设置为不可见,这很完美,但是我无法更改它。

我希望如果用户单击图像,第二个图像应该替换第一个图像,但是我不能在图像视图中更改图像,我建议这与我无法更改的字符串的问题相同。

谢谢你的帮助!


    private List<cards> listItems;
    private Context context;


    public arrayAdapter(List<cards> listItems, Context context) {
        this.listItems = listItems;
        this.context = context;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
        return new ViewHolder(v);
    }

    @SuppressLint("SetTextI18n")
    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
        final cards currentItem = listItems.get(i);

        viewHolder.name.setText(currentItem.getName());
        viewHolder.comment.setText(currentItem.getComment());


        Picasso.get().load(currentItem.getProfileImageUrl()).into(viewHolder.image);

        viewHolder.name.setText("this work"); // here it works

        viewHolder.image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

               //Try this
                 currentItem.setName("New text");
                  notifyDataSetChanged();


               //viewHolder.name.setText("New text"); // this does not work
               // viewHolder.name.setVisibility(View.INVISIBLE); this does work
                Picasso.get().load(currentItem.getProfileImageUrl2()).into(viewHolder.image); // does not work
            }
        });

    }

    @Override
    public int getItemCount() {
        return listItems.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView name, comment, howMany;
        public ImageView image;


        /**
         * @param itemView
         */
        ViewHolder(@NonNull View itemView) {
            super(itemView);
            name = (TextView) itemView.findViewById(R.id.name);
            image = (ImageView) itemView.findViewById(R.id.image);
            comment = (TextView) itemView.findViewById(R.id.commentText);
        }
    }


}

标签: javaandroidandroid-recyclerview

解决方案


你应该打电话notifyItemChanged到相应的位置。

   @Override
   public void onBindViewHolder(final ViewHolder viewHolder, int position) {
    final cards currentItem = listItems.get(i);

    viewHolder.name.setText(currentItem.getName());
    viewHolder.comment.setText(currentItem.getComment());


    Picasso.get().load(currentItem.getProfileImageUrl()).into(viewHolder.image);

    viewHolder.name.setText("this work"); // here it works

    viewHolder.image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           viewHolder.name.setText("New text"); // this does not work
           // viewHolder.name.setVisibility(View.INVISIBLE); this does work
            Picasso.get().load(currentItem.getProfileImageUrl2()).into(viewHolder.image); // does not work

   notifyItemChanged(position);
        }
    });

}

推荐阅读