如何获取Android中已过滤ListView的点击项的索引?

时间:2014-06-28 07:47:07

标签: android listview

我的问题是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之后,任何人都可以帮助我获得产品吗?

1 个答案:

答案 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.
    }
});` 

希望这能解决您的问题。我不知道任何其他更好的方法。