Android - 通过 ArrayAdapter 从 ListView 中删除行时 ListItem id 发生变化
Android - ListItem id changing when removing rows from ListView via ArrayAdapter
Android 开发相当陌生,我有一个问题。
我有一个带有 TextView 的 ListView。我有一个 ArrayAdapter,我要在单击按钮时删除一个 ListItem。在我的 ListActivity 中,我将 id 分配给 ListItems,问题是当我删除 ListItem 时,以下 ListItem 继承了它的 id。
即:
假设我有 2 个 ListItems:ListItem0 with id 0, ListItem 1,ID 为 1。 ==> 如果我删除 ListItem0 那么 ListItem1 将获得 id 0
基本上有什么方法可以保留 ListItem ID,即使我删除了其中一些?
后期编辑: 通过从 idList 中删除 id 解决:
idList.remove(position)
public void displayL() {
Cursor c = mDbAdapter.fetchAllReminders();
numberList.clear();
idList.clear();
startManagingCursor(c);
c.moveToFirst();
if (c .moveToFirst()) {
while (c.isAfterLast() == false) {
id= c.getString(c.getColumnIndex(RemindersDbAdapter.KEY_ROWID));
String name = c.getString(c.getColumnIndex(RemindersDbAdapter.KEY_TITLE));
numberList.add(name);
idList.add(id);
c.moveToNext();
}
}
adapter = new ItemAdapter(this, R.layout.row, numberList, idList);
setListAdapter(adapter);
adapter.notifyDataSetChanged();
}
适配器class:
public class ItemAdapter extends ArrayAdapter<String> {
private ArrayList<String> idList = null;
private ArrayList<String> numberList;
private ImageView delete_entry;
public RemindersDbAdapter mDbAdapter;
public View v;
public ArrayList<String> clickId;
private long positionId;
public ItemAdapter(Context context, int textViewResourceId, ArrayList<String> numberList,
ArrayList<String> clickPosition) {
super(context, textViewResourceId, numberList);
this.numberList = numberList;
clickId = clickPosition;
}
@Override
public int getPosition(String item) {
return super.getPosition(item);
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
public View getView(final int position, View convertView, ViewGroup parent){
v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.row, null);
}
mDbAdapter= new RemindersDbAdapter(v.getContext());
final String number = numberList.get(position);
mDbAdapter.open();
if (number != null) {
final TextView tt = (TextView) v.findViewById(R.id.text_number);
tt.setTextColor(Color.parseColor("#ffffff"));
delete_entry = (ImageView) v.findViewById(R.id.delete_entry);
tt.setText(number);
delete_entry.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
positionId = Integer.parseInt(clickId.get(position));
if(position>=0) {
Log.d("Delete--", "DELETING ID #" + positionId);
Boolean b = mDbAdapter.deleteReminder(positionId); //delete from database
numberList.remove(number); //remove listItem
notifyDataSetChanged();
}
mDbAdapter.close();
}
});
}
return v;
}
当您从 numberList 中删除数字时,您似乎并没有从 idList 中删除 id,因此看起来它是被继承的。试试这个。
public void onClick(View v) {
positionId = Integer.parseInt(clickId.get(position));
if(position>=0) {
Log.d("Delete--", "DELETING ID #" + positionId);
Boolean b = mDbAdapter.deleteReminder(positionId); //delete from database
numberList.remove(number); //remove listItem
idList.remove(position);
notifyDataSetChanged();
}
mDbAdapter.close();
}
Android 开发相当陌生,我有一个问题。
我有一个带有 TextView 的 ListView。我有一个 ArrayAdapter,我要在单击按钮时删除一个 ListItem。在我的 ListActivity 中,我将 id 分配给 ListItems,问题是当我删除 ListItem 时,以下 ListItem 继承了它的 id。
即:
假设我有 2 个 ListItems:ListItem0 with id 0, ListItem 1,ID 为 1。 ==> 如果我删除 ListItem0 那么 ListItem1 将获得 id 0
基本上有什么方法可以保留 ListItem ID,即使我删除了其中一些?
后期编辑: 通过从 idList 中删除 id 解决:
idList.remove(position)
public void displayL() {
Cursor c = mDbAdapter.fetchAllReminders();
numberList.clear();
idList.clear();
startManagingCursor(c);
c.moveToFirst();
if (c .moveToFirst()) {
while (c.isAfterLast() == false) {
id= c.getString(c.getColumnIndex(RemindersDbAdapter.KEY_ROWID));
String name = c.getString(c.getColumnIndex(RemindersDbAdapter.KEY_TITLE));
numberList.add(name);
idList.add(id);
c.moveToNext();
}
}
adapter = new ItemAdapter(this, R.layout.row, numberList, idList);
setListAdapter(adapter);
adapter.notifyDataSetChanged();
}
适配器class:
public class ItemAdapter extends ArrayAdapter<String> {
private ArrayList<String> idList = null;
private ArrayList<String> numberList;
private ImageView delete_entry;
public RemindersDbAdapter mDbAdapter;
public View v;
public ArrayList<String> clickId;
private long positionId;
public ItemAdapter(Context context, int textViewResourceId, ArrayList<String> numberList,
ArrayList<String> clickPosition) {
super(context, textViewResourceId, numberList);
this.numberList = numberList;
clickId = clickPosition;
}
@Override
public int getPosition(String item) {
return super.getPosition(item);
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
public View getView(final int position, View convertView, ViewGroup parent){
v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.row, null);
}
mDbAdapter= new RemindersDbAdapter(v.getContext());
final String number = numberList.get(position);
mDbAdapter.open();
if (number != null) {
final TextView tt = (TextView) v.findViewById(R.id.text_number);
tt.setTextColor(Color.parseColor("#ffffff"));
delete_entry = (ImageView) v.findViewById(R.id.delete_entry);
tt.setText(number);
delete_entry.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
positionId = Integer.parseInt(clickId.get(position));
if(position>=0) {
Log.d("Delete--", "DELETING ID #" + positionId);
Boolean b = mDbAdapter.deleteReminder(positionId); //delete from database
numberList.remove(number); //remove listItem
notifyDataSetChanged();
}
mDbAdapter.close();
}
});
}
return v;
}
当您从 numberList 中删除数字时,您似乎并没有从 idList 中删除 id,因此看起来它是被继承的。试试这个。
public void onClick(View v) {
positionId = Integer.parseInt(clickId.get(position));
if(position>=0) {
Log.d("Delete--", "DELETING ID #" + positionId);
Boolean b = mDbAdapter.deleteReminder(positionId); //delete from database
numberList.remove(number); //remove listItem
idList.remove(position);
notifyDataSetChanged();
}
mDbAdapter.close();
}