[英]Add & delete item from LinearLayout using ArrayAdapter
我正在对所选联系人进行气泡显示。 每个电话气泡都是一个LinearLayout,其中包含ImageView和TextView。 这些气泡然后显示在另一个LinearLayout中,它是HorizontalScrollView的子级。
它的子树/父树看起来像这样:
- HorizontalScrollView
|- LinearLayout (id="@+id/telField")
|- LinearLayout (id="@+id/telBox") <- is programmatically added to parent
|- TextView (id="@+id/telNumber")
|- ImageView (id="@+id/delNumber")
在我的.java类中,我调用此方法在“ telField” LinearLayout中显示“ telBox” LinearLayout:
public void createAdapter() {
telList = new ArrayAdapter<>(this, R.layout.text_buble, R.id.telNumber, telNumList);
telField = (LinearLayout) findViewById(R.id.telField);
telField.removeAllViews();
final int adapterCount = telNumList.size();
for (ik = 0; ik < adapterCount; ik++) {
final View item = telList.getView(ik, null, null);
telField.addView(item);
item.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
telField.removeView(item);
telNumList.remove(ik-1);
telList.notifyDataSetChanged();
refresh();
}
});
}
}
方法refresh();
–是自定义方法,有助于“重新加载”活动:它获取应用程序值,刷新警告ImageViews并校准createAdapter()方法 。
大按钮“ SELECT”调用一个Intent,该Intent返回通讯录中选定的电话号码。 我调用以下代码来更新ID为“ telField”的LinearLayout:
telNumList.add(cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)));
createAdapter();
我面临的问题是:
在单击ID为“ telNumber”的LinearLayout之后,它会逐个删除每个气泡(无论单击哪个气泡),直到到达第一个添加的气泡为止。 当到达第一个添加的元素时,它也会崩溃50/50,我还没有弄清依赖项。 它返回的错误是“越界错误”,因此我认为它与
ik - 1
行连接。
我的问题是:如何更好地构造ArrayAdapter?
在您的代码中,您尝试通过ik
删除视图,该视图正在不断变化,因此您的代码正在删除最后的视图。我已修改了您的代码,如下所示
for (ik = 0; ik < adapterCount; ik++) {
final int position=ik;
final View item = telList.getView(ik, null, null);
telField.addView(item);
item.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
telField.removeView(item);
telNumList.remove(position);
telList.notifyDataSetChanged();
//refresh();
createAdapter();
}
});
}
在此position
将帮助您删除要删除的特定视图。 我希望这是您要的。
在您的for循环中,编写以下代码行:
for (ik = 0; ik < adapterCount; ik++) {
final View item = telList.getView(ik, null, null);
item.setTag(ik);
telField.addView(item);
item.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int index = Integer.parseInt(v.getTag().toString());
telNumList.remove(index);
refresh();
}
});
}
希望它能对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.