Android 如何使用自定义数组适配器删除自定义列表中的特定列表项(列表行)?

Android 如何使用自定义数组适配器删除自定义列表中的特定列表项(列表行)?,android,listview,android-arrayadapter,Android,Listview,Android Arrayadapter,我是安卓系统的新手,我正在开发一个应用程序,其中我正在扫描NFC卡,并将NFC的结果字符串与列表中的值进行匹配。 所以我想要的是,当NFC的结果与任何列表项匹配时,应该删除匹配的列表项(列表行)。 以下是自定义列表视图的代码: public class Item { private String StdName; private String Id; private int img; public Item() { } public Item(String n

我是安卓系统的新手,我正在开发一个应用程序,其中我正在扫描NFC卡,并将NFC的结果字符串与列表中的值进行匹配。 所以我想要的是,当NFC的结果与任何列表项匹配时,应该删除匹配的列表项(列表行)。 以下是自定义列表视图的代码:

public class Item {
     private String StdName;
     private String Id;
     private int img;

public Item() {

}

public Item(String name, String id, int img) {
    this.StdName = name;
    this.Id = id;
    this.img = img;
}
//getters & setters...
 ...
}
并使用自定义阵列适配器

 public class ItemAdapter extends ArrayAdapter<Item>
公共类ItemAdapter扩展了ArrayAdapter
将元素添加到列表中,如下所示:

 private ArrayList<Item> m_parts = new ArrayList<Item>();
 m_parts.add(new Item(StdntId, StudentName, R.drawable.cancel));
 m_adapter = new ItemAdapter(MainActivity.this, R.layout.list_row, m_parts);
 listView.setAdapter(m_adapter);
private ArrayList m_parts=new ArrayList();
m_零件。添加(新项目(StdntId,StudentName,R.drawable.cancel));
m_adapter=新项目适配器(MainActivity.this、R.layout.list_行、m_零件);
setAdapter(m_adapter);
我需要找出Id(列表项中的一个字段)与NFC字符串匹配的列表项的索引,以便我可以按索引删除列表项。 主要问题是将结果字符串(如“2”)与自定义数组列表中的“id”字段(即m_部件)进行比较,该部件共有3个字段,如(字符串id、字符串名称、整数img)。因此,我想将感应nfc标签得到的字符串与m_零件数组列表中的“id”字段相匹配,因此请帮助/指导我完成任务


谢谢

您需要从列表中删除该项,然后告诉适配器它已被删除,如下所示:

this.m_parts.remove(position);
notifyItemRemoved(position);
public void checkAndDeleteMatchingIds(String idToMatch) {
    for (int i = 0; i < m_parts.size(); i++) {
        if (m_parts.get(i).getId().equals(idToMatch)) {
            removePart(i);
        }
    }
}

public void removePart(int position) {
    this.m_parts.remove(position);
    notifyItemRemoved(position);
}
获取位置的逻辑将根据代码的其他部分的工作方式而有所不同

要匹配字符串,只需在每个项目中循环,查看它是否匹配,如果匹配,则删除/删除它。大概是这样的:

this.m_parts.remove(position);
notifyItemRemoved(position);
public void checkAndDeleteMatchingIds(String idToMatch) {
    for (int i = 0; i < m_parts.size(); i++) {
        if (m_parts.get(i).getId().equals(idToMatch)) {
            removePart(i);
        }
    }
}

public void removePart(int position) {
    this.m_parts.remove(position);
    notifyItemRemoved(position);
}
public void checkanddeleteMachingIDS(字符串idToMatch){
对于(int i=0;i
上面的代码位于适配器内部,扫描时调用check和deleteMatchingIDS。

公共接口ABPickerAnyController{
public interface ABPickerAnyController<E, T> {
    boolean isPicked(E expect, T iterTarget);
}

public static <E, T> T pickAnyFirst(E expect, Collection<T> collection, ABPickerAnyController<E, T> pickerController) {
    if (null == expect || ABTextUtil.isEmpty(collection)) {
        return null;
    }
    T picked = null;
    for (T t : collection) {
        if (pickerController.isPicked(expect, t)) {
            picked = t;
            break;
        }
    }
    return picked;
}

// pick the item with `id` equals `abc123`
Item item = pickAnyFirst("abc123", m_parts, new ABPickerAnyController<Item, String>(){
    @Override
    public boolean isPicked(String expect, Item iterTarget){
        return expect.equals(iterTarget.getId());
    }
})

if(null != item){
    m_parts.remove(item);
    m_adapter.notifyDataChanged();
}
布尔值(E expect,T iterTarget); } public static T pickAnyFirst(E expect、Collection Collection、ABPickerAnyController pickerController){ if(null==expect | | ABTextUtil.isEmpty(集合)){ 返回null; } T=null; 对于(T:集合){ 如果(pickerController.isPicked(expect,t)){ 拾取=t; 打破 } } 回采; } //选择'id'等于'abc123'的项目` Item Item=pickAnyFirst(“abc123”,m_零件,新ABPickerAnyController(){ @凌驾 公共布尔值isPicked(字符串expect,Item iterTarget){ 返回expect.equals(iterTarget.getId()); } }) 如果(空!=项目){ m_零件。移除(项目); m_适配器。notifyDataChanged(); }
您想2从listview中删除重复项??不完全是这样,我只想通过比较结果字符串和列表行中的Id来删除列表项。是的,您是对的,但主要问题是如何比较结果字符串,例如“2”和“Id”自定义数组列表中的字段,即m_部分,共有3个字段,如(字符串id、字符串名称、整数img)。因此,我想匹配从感知nfc标记和m_parts arraylist中的id字段得到的字符串。