我的问题是this问题的延伸部分。
当ListView
被过滤时,我需要从ListView
中点击的列表项中获取特定模型。
这是我的数据模型。
public class ProductListModel{
@Override
public String toString() {
return ProductName;
}
public ProductListModel(int ProductId, String ProductName) {
ProductId = ProductId;
ProductName = ProductName;
}
public int getProductId() {
return ProductId;
}
public void setProductId(int ProductId) {
ProductId = ProductId;
}
public String getProductName() {
return ProductName;
}
public void setProductName(String ProductName) {
ProductName = ProductName;
}
int ProductId;
String ProductName;
}
我从数据库中获取的数组。
ProductListModel[] slm=new ProductListModel[count];
我有ArrayAdapter
这样的
ArrayAdapter<ProductListModel> ad=new ArrayAdapter<ProductListModel>(this, android.R.layout.simple_list_item_1, android.R.id.text1, slm);
我的ItemClickListener
也工作得很好,给了我必须提供的一切。
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long id) {
Toast.makeText(getApplicationContext(),slm[position].ProductName, Toast.LENGTH_LONG).show();
}
});
但是当我过滤适配器以仅显示过滤数据时,onItemClick()
会提供一些未点击的其他值。
我认为这种情况正在发生,因为当我们过滤数据时,项目的行位置正在发生变化,因此它没有提供原始位置来获得产品的产品点击。
在我们过滤ListView
之后,任何人都可以帮助我获得产品吗?
答案 0 :(得分:1)
我有一个棘手的方式..
将原始列表保留为主类中的全局变量。
列出orgList;
您可以在适配器类的getView()
视图中标记项目名称。
并在lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long id) {
String name = agr1.getTag().tostring();
//orgList original item position from name variable and use it
orgList.indexOf(name) will do that.
}
});`
希望这能解决您的问题。我不知道任何其他更好的方法。