2014-06-28 135 views
-2

我的问题是this问题的扩展部分。如何获取Android中过滤ListView的点击项的索引?

ListView被过滤时,我需要从ListView中点击的listitem中获取特定的模型。

这是我的数据模型。

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后,任何人都可以帮助我获得productid吗?

+1

use Adapter.getItem()method – pskink

+0

Thanks @pskink。从来没有想过从适配器本身获取数据。我如何接受这个答案? –

+0

这是获取适配器项目的唯一方式,绝不使用任何其他解决方法 – pskink

回答

1

我有一个棘手的方法.. 保留原始列表作为全局变量在主类。 List 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. 
    } 
});` 

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

+0

感谢您的快速回复Jithu。我没有尝试你的方法,因为Adapter.getItem()方法现在解决了我的问题。但一旦我完成这个项目,肯定会尝试这个。 –

+0

好..我知道getItem()将解决你的问题。但我曾经保持getItem()为空..这就是为什么我这样想。 getItem()是正确的方法。不需要尝试这一点。 – Jithu

相关问题