在Recyclerview中滚动后,以前的数据会更新

问题描述 投票:0回答:2

我正在使用Recyclerview适配器,我的Recyclerview项目有1个textView和1个Button,

如果我单击Button,TextView值为Hi,它应该在Recyclerview项目上更改为Hello。按钮单击TextView值正在正确更改..(即从Hi更改为Hello)

问题是当我滚动Recyclerview时,滚动后它再次显示Previous值(即再次显示Hi)。

我知道有很多类似的问题被问到堆栈溢出我已经尝试过大部分问题,但似乎没有什么工作在我的情况下。

解决了我的问题,添加了工作代码。(在下面添加了一行)

listNet.set(position,new NetData(VALUE));

notifyItemChanged(位置);

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值之后,该值应该是常量,在滚动后不应该更改。

谢谢..

java android android-recyclerview recycler-adapter
2个回答
1
投票

将文本设置为textview是不够的,因为recyclerview将回收视图。

您需要在数据集中保存更改的文本,并将更改通知给视图。只有这样,您的更改才会持续存在。


1
投票

您必须保存对ArrayList的更改<NetData> listNet的更改位置如下所示代码抱歉不要获取您的代码所以只是在这里做了评论。

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
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.