android-RecyclerView在新行中显示在EditText中输入的先前值

android-RecyclerView在新行中显示在EditText中输入的先前值,第1张

概述我正在创建一个Android应用程序,其中使用recyclerView,recyclerView行中有editText.这是我的ReadingAdapter类publicclassReadingAdapterextendsRecyclerView.Adapter<ReadingAdapter.ViewHolder>implementsAdapterView.OnItemSelectedListener{Contextcontext;

我正在创建一个Android应用程序,其中使用recyclerVIEw,recyclerVIEw行中有editText.

这是我的ReadingAdapter类

public class ReadingAdapter extends RecyclerVIEw.Adapter<ReadingAdapter.VIEwHolder>  implements AdapterVIEw.OnItemSelectedListener {    Context context;    String valOpenReading, valClosReading, valConsumption;    private List<ReadingData> readingList;    static String[] arrValOpenRead, arrValClosRead, arrValConsumption;    public ReadingAdapter(Context context, List<ReadingData> readingList) {        this.context = context;        this.readingList = readingList;        arrValOpenRead = new String[readingList.size()];        arrValClosRead = new String[readingList.size()];        arrValConsumption = new String[readingList.size()];    }    @OverrIDe    public ReadingAdapter.VIEwHolder onCreateVIEwHolder(VIEwGroup parent, int vIEwType) {        VIEw vIEw = LayoutInflater.from(parent.getContext()).inflate(R.layout.reading_sheet_layout, parent, false);        return new ReadingAdapter.VIEwHolder(vIEw);    }    @OverrIDe    public voID onBindVIEwHolder(final ReadingAdapter.VIEwHolder holder, final int position) {        ReadingData tempData = readingList.get(position);        holder.pdtname.setText(tempData.pdtname);        holder.keyID.setText("Key "+tempData.keyID);        holder.etClosRead.addTextChangedListener(new TextWatcher() {            boolean ignore = false;            @OverrIDe            public voID beforeTextChanged(CharSequence s, int start, int count, int after) {            }            @OverrIDe            public voID onTextChanged(CharSequence s, int start, int before, int count) {            }            @OverrIDe            public voID afterTextChanged(Editable s) {                if (ignore)                    return;                ignore = true;                valOpenReading = holder.etopenRead.getText().toString();                arrValOpenRead[position] = valOpenReading;                valClosReading = s.toString().equals("") ? "0": s.toString();                arrValClosRead[position] = valClosReading;                if (!valOpenReading.equals("")) {                    if (Integer.parseInt(valClosReading) < Integer.parseInt(valOpenReading)) {                        Toast.makeText(context, "Check once! closing reading should be more than opening reading!", Toast.LENGTH_LONG).show();                        valConsumption = "0";                        holder.consumption.setText("");                    } else {                        valConsumption = (Integer.parseInt(valClosReading) - Integer.parseInt(valOpenReading))+"";                        arrValConsumption[position] = valConsumption;                        holder.consumption.setText(valConsumption);                    }                } else                    Toast.makeText(context, "Please fill the opening reading!", Toast.LENGTH_SHORT).show();                ignore = false;            }        });    }    @OverrIDe    public int getItemCount() {        return readingList.size();    }    @OverrIDe    public voID onItemSelected(AdapterVIEw<?> parent, VIEw vIEw, int position, long ID) {    }    @OverrIDe    public voID onnothingSelected(AdapterVIEw<?> parent) {    }    public class VIEwHolder extends RecyclerVIEw.VIEwHolder{        TextVIEw pdtname, keyID, consumption;        EditText etopenRead, etClosRead;        public VIEwHolder(VIEw vIEw) {            super(vIEw);            pdtname = (TextVIEw)vIEw.findVIEwByID(R.ID.txt_List_pdt_supp);            keyID = (TextVIEw)vIEw.findVIEwByID(R.ID.key_set);            etopenRead = (EditText)vIEw.findVIEwByID(R.ID.open_val_set);            etClosRead = (EditText)vIEw.findVIEwByID(R.ID.clos_val_set);            consumption = (TextVIEw)vIEw.findVIEwByID(R.ID.consumption_val);        }    }}

这是我的ReadingData.java

public class ReadingData {    String pdtname, keyID, openReading, closReading, consumption;    public ReadingData(String pdtname, String keyID) {        this.pdtname = pdtname;        this.keyID = keyID;    }}

在这里,如果我在recyclerVIEw的起始项中输入值,那么当我向上滚动项至列表的底部时,最后一项将具有该值.

请忽略图片质量,因为我们无法上传2MiB以上的快照.

在此,列表滚动时视图被回收.如何防止将值复制到列表中的其他项目.

那个吐司也要重复几次.如何阻止这个.

更新:
通过SO问题How ListView’s recycling mechanism works的建议LQ Gioan,我得到了ListVIEw实际上如何与视图回收一起工作的逻辑.

但是我不确定recyclerVIEw是否也能正常工作.

但是在我的情况下,我该如何实施此过程.请有人在这里帮助我.

解决方法:

RecyclerVIEw重用视图,实际上它只生成与屏幕上可见的视图一样多的视图.因此,如果可以看到为其他行设置的值,这是可以预期的

该解决方案将设置为您要更改为默认视图的视图的所有属性,或者应从数据集中显示任何行

因此,将addTextChangedListener放入insode VIEwHolder构造函数中(您可以通过调用getAdapterposition()来获得位置)以获得更好的性能,并从数据集中设置onBindVIEwHolder方法中的editText值

总结

以上是内存溢出为你收集整理的android-RecyclerView在新行中显示在EditText中输入的先前值全部内容,希望文章能够帮你解决android-RecyclerView在新行中显示在EditText中输入的先前值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1093171.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存