Android 如何使用自定义数组适配器删除自定义列表中的特定列表项(列表行)?
我是安卓系统的新手,我正在开发一个应用程序,其中我正在扫描NFC卡,并将NFC的结果字符串与列表中的值进行匹配。 所以我想要的是,当NFC的结果与任何列表项匹配时,应该删除匹配的列表项(列表行)。 以下是自定义列表视图的代码: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
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字段得到的字符串。