【问题标题】:Validating duplicate entries in a RecyclerView验证 RecyclerView 中的重复条目
【发布时间】:2018-11-16 11:14:53
【问题描述】:

我正在尝试使用添加按钮在回收站视图中添加序列号。 需要检查是否重复值试图添加到回收站视图中。

添加按钮 Onclick 监听代码如下

 serialNumberAddButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!serialNumberField.getText().toString().equals("")) {

            // here need to check the duplicate values

                SerialNumberPojo serialNumberPojo = new SerialNumberPojo(serialNumberField.getText().toString());
                serialNumberPojoList.add(serialNumberPojo);

                RecyclerView recyclerView = view.findViewById(R.id.serial_recycle);
                serialNumberAdapter = new SerialNumberAdapter(serialNumberPojoList, view.getContext(), ScannedDetailsFragment.this);

                actualQuantity.setText(String.valueOf(serialNumberAdapter.getItemCount()));
                mLayoutManager = new LinearLayoutManager(view.getContext());
                recyclerView.setLayoutManager(mLayoutManager);
                recyclerView.setItemAnimator(new DefaultItemAnimator());
                recyclerView.setHasFixedSize(true);
                recyclerView.setAdapter(serialNumberAdapter);
                serialNumberAdapter.notifyDataSetChanged();



            } else {
                messageDialog.showAlertDialogBox(getContext(), "Add or Scan Serial Number", "error");
            }
        }
    });

【问题讨论】:

  • 您可以通过contains 进行检查,也可以使用HashSet 列表来防止重复值。
  • serialNumberPojoList 具有自定义数据类型 pojo 类,我尝试使用 contains 但不起作用
  • 你需要在你的 pojo 中覆盖 equals()hashcode() 方法,之后 contains 才能工作。
  • public boolean equals(Object obj) { return super.equals(obj); } public int hashCode() { return super.hashCode();我已经在 pojo 类中实现了这个是好的还是需要这个方法上的代码
  • 您需要在那里实现实际代码,例如。 G。 public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) 返回 false; SerialNumberPojo = (SerialNumberPojo) o; return !(getId() != null ? !getId().equals(that.getId()) : that.getId() != null); }

标签: android android-studio android-recyclerview


【解决方案1】:

你可以这样做:

SerialNumberPojo serialNumberPojo = new SerialNumberPojo(serialNumberField.getText().toString());
if (!serialNumberPojoList.contains(serialNumberPojo)) {
    serialNumberPojoList.add(serialNumberPojo);
}

而在 SerialNumberPojo 中,您需要实现自己的 equals(),例如:

@Override
public boolean equals(Object other) {
    if (this == other) return true;
    if (other == null || getClass() != other.getClass()) return false;

    SerialNumberPojo  that = (SerialNumberPojo) other;

    if (getId() != null && getId().equals(that.getId())) {
        return true;
    }

    return false;
}

【讨论】:

  • 非常感谢您的及时支持。
【解决方案2】:

您可以在onCreate 函数中初始化回收视图。喜欢:

@Override
public void onCreate(...) {
    ...
    recyclerView = findViewById(R.id.serial_recycle);
    serialNumberAdapter = new SerialNumberAdapter(serialNumberPojoList, view.getContext(), ScannedDetailsFragment.this);
    mLayoutManager = new LinearLayoutManager(view.getContext());
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setHasFixedSize(true);
    recyclerView.setAdapter(serialNumberAdapter);
    ...
}

并在您的OnClickListener 中检查是否重复写入@Szymon Chaber

serialNumberAddButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (!serialNumberField.getText().toString().equals("")) {
            SerialNumberPojo serialNumberPojo = new SerialNumberPojo(serialNumberField.getText().toString());
            if (!serialNumberPojoList.contains(serialNumberPojo)) {
                serialNumberPojoList.add(serialNumberPojo);
            } else {
                // your action if found duplicate value 
            }
            serialNumberAdapter.updateData(serialNumberPojoList);
            serialNumberAdapter.notifyDataSetChanged();
            actualQuantity.setText(String.valueOf(serialNumberAdapter.getItemCount()));
        } else {
            messageDialog.showAlertDialogBox(getContext(), "Add or Scan Serial Number", "error");
        }
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2017-09-07
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多