在我的适配器中,我无法在onClickListener中更改定义的值

时间:2019-03-28 09:13:32

标签: java android android-recyclerview

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

我希望如果用户单击图像,第二个图像应替换第一个图像,但是我不能在imageview中更改图像,我建议这与不能更改的String是相同的问题

感谢您的帮助!

pip3 uninstall anotherpackage

4 个答案:

答案 0 :(得分:3)

您应使用相应的位置致电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);
        }
    });

}

答案 1 :(得分:1)

更改列表中特定位置的值,然后notifyItemChanged(position); 在您的点击事件中编写以下代码:

currentItem.setName("abc");
notifyItemChanged(position) 

答案 2 :(得分:0)

在数据模型中,您保留了一个变量,该变量指示当前的个人资料图片。

例如

 class cards {
      String name;
      String comment;
      ....
      boolean profileImageChanged;
    }

然后在onBindViewHolder中

    @SuppressLint("SetTextI18n")
        @Override
        public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
           ....

           if(currentItem.profileImageChanged){
             Picasso.get()
             .load(currentItem.getProfileImageUrl()).into(viewHolder.image);
           } else {
             Picasso.get()
             .load(currentItem.getProfileImageUrl2()).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
                   notifyItemChanged(position);
                }
            });

        }

答案 3 :(得分:0)

嗨,您也可以采用这种方法。

@Override    public void onBindViewHolder(final ViewHolder viewHolder,int position){     最终卡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 viewNewHolder=viewHolder
       viewNewHolder.name.setText("New text"); 

Picasso.get()。load(currentItem.getProfileImageUrl2())。into(viewNewHolder.image);         }     });

}

我已经用它了。

*******万事如意*********