我正在使用Recyclerview适配器,我的Recyclerview项具有1个textView和1个按钮,
如果我单击Button,则TextView值为 Hi ,它应该在Recyclerview项上更改为 Hello 。 在按钮上单击TextView值正确更改。(即,从 Hi 更改为 Hello ))
问题是我滚动recyclerview时,滚动后它再次显示Previous value(即再次显示 Hi )。
我知道在堆栈溢出时会问很多类似的问题,我已经尝试了其中的大多数,但是对于我来说似乎没有任何作用。
我的问题已解决,添加了工作代码。(添加到下面的行中)
listNet.set(position,new NetData(VALUE));
notifyItemChanged(position);
public class NetAdapter extends RecyclerView.Adapter<NetAdapter.MyViewHolder> {
Context context;
List<NetData> listNet;
public NetAdapter(Context context, ArrayList<NetData> listNet){
this.context = context;
this.listNet = listNet;
}
@SuppressLint("ResourceAsColor")
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position){
final NetData netData=listNet.get(position);
holder.tv.setText(netData.dnetqty);
holder.btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
String VALUE = "Hello"
holder.tv.setText(VALUE); //Changing Text from Hi to Hello
//Edited Answer
listNet.set(position, new NetData(VALUE));
notifyItemChanged(position);
}
});
}
public class MyViewHolder extends RecyclerView.ViewHolder {
Button btn;
TextView tv;
public MyViewHolder(View itemView){
super(itemView);
btn=itemView.findViewById(R.id.btn);
tv=itemView.findViewById(R.id.tv);
}
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.item_recyclerview, parent, false);
return new MyViewHolder(view);
}
@Override
public int getItemCount(){
return listNet.size();
}
}
我想要的是,在更改TextView值之后,该值应为常数,并且在滚动后不应更改。.
谢谢..
答案 0 :(得分:1)
仅将文本设置为textview是不够的,因为recyclerview会回收视图。
您需要将更改的文本保存在数据集中,并将这些更改通知视图。只有这样,您的更改才会继续。
答案 1 :(得分:1)
您必须将更改保存到 ArrayList
holder.btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
holder.tv.setText("Hello"); //Changing Text from Hi to Hello
//here save Hello to your *listNet.get(position)*'s dnetqty property
}
});