2014-06-28 103 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

相關問題