gpt4 book ai didi

android:从 ListView 中删除项目无法正常工作

转载 作者:行者123 更新时间:2023-11-30 03:47:15 26 4
gpt4 key购买 nike

我有一个带有两个 TextView 和一个按钮的自定义适配器,它应该删除该行。

public class ListViewAdapter extends ArrayAdapter<OneRowListView> implements OnClickListener {
private ArrayList<OneRowListView> items;
private ContactsActivity ca;
private int position;
private OneRowListView o;

public ListViewAdapter(Context context, int textViewResourceId, ArrayList<OneRowListView> items) {
super(context, textViewResourceId, items);
this.items = items;
ca = (ContactsActivity) context;
}
@Override
public View getView(int pos, View convertView, ViewGroup parent) {
View v = convertView;
position = pos;
if (v == null) {
LayoutInflater vi = (LayoutInflater)ca.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.one_item_contacts_list, null);
}
o = items.get(position);
if (o != null) {
TextView name = (TextView) v.findViewById(R.id.name);
TextView surname = (TextView) v.findViewById(R.id.surname);
TextView phoneNumber = (TextView) v.findViewById(R.id.phonenumber);
Button deleteButton = (Button) v.findViewById(R.id.deleteButton);
deleteButton.setOnClickListener(this);
// ...
}
return v;
}

@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.deleteButton:
remove(items.remove(position));
notifyDataSetChanged();
break;
}
}
}

问题是,当按下任何按钮时,它总是删除最后一行,而不是当前行。变量位置总是指向最后一行。问题出在哪里?

最佳答案

问题是,当您执行 position = pos; 时,您会不断覆盖“position”变量(因为在滚动 ListView 时会为每一行调用 getView())。

作为快速修复,您可以在 deleteButton 中存储一个包含行位置的标签,而不是使用“position”变量。例如,在您的 getView() 方法中是这样的:

deleteButton.setTag(pos);

然后在您的 onClick() 方法中您可以:

int position = (int) v.getTag();
...

关于android:从 ListView 中删除项目无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14782868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com