[英]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.