我正在尝试按其ID删除ListView中的项目。目前,他们正被名单上的第一个职位删除。我可以在列表中有很多项目。(例子)当我尝试从列表中删除第六项时,第一项被删除,第六项仍然存在。 如何通过ID删除列表,例如m1aa或stringl1。我的数据库完全删除了string1,但它保留在列表中,除非它位于顶部位置。
int pos;
long id;
final ListView lv = getListView();
我忘记将此添加到我的问题
ArrayList<String> listItems=new ArrayList<String>();
ArrayAdapter<String> adapter;
adapter=new ArrayAdapter<String>(this,
R.layout.singlelistview,listItems);
setListAdapter(adapter);
抱歉
Button button5 = (Button) dialogView.findViewById(R.id.button5);
button5.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
TextView textviewlay1 =(TextView)findViewById(R.id.m1aa);
String stringl1 = textviewlay1.getText().toString();
Double doubl1 = Double.parseDouble(stringl1);
final String str=lv.getItemAtPosition(pos).toString();
Log.i("ListView", "onLongListItemClick string=" + str);
{listItems.remove(pos);
adapter.notifyDataSetChanged();}
controller1.deletename(stringl1);
}});
答案 0 :(得分:2)
您似乎没有设置变量pos
。它是int
变量,因此在您致电时为0:
listItems.remove(pos);
结果第一项(它的索引等于0)将被删除。
答案 1 :(得分:1)
这种情况正在发生,因为getView()调用所有项目,然后单击按钮删除行,此时位置设置为最后一行,这就是每次删除最后一项的原因。您必须将位置设置为标记到按钮,并且在删除时您可以通过此标记获取索引。感谢
int pos;
long id;
final ListView lv = getListView();
Button button5 = (Button) dialogView.findViewById(R.id.button5);
button5.setTag(pos);
button5.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
TextView textviewlay1 =(TextView)findViewById(R.id.m1aa);
String stringl1 = textviewlay1.getText().toString();
Double doubl1 = Double.parseDouble(stringl1);
final String str=lv.getItemAtPosition((Button)v.getTag()).toString();
Log.i("ListView", "onLongListItemClick string=" + str);
{listItems.remove(String.vauleOf((Button)v.getTag()));
adapter.notifyDataSetChanged();}
controller1.deletename(stringl1);
}});
也可以通过onItemClickListener
完成listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view,
int position, long id) {
final String item = (String) parent.getItemAtPosition(position);
list.remove(item);
adapter.notifyDataSetChanged();
}
});