2013-07-11 136 views
1

所以我有一個lisview每行/項目隱藏/顯示不同的控件。的Android的ListView丟失物品高度

我跟蹤所有的數據和控制設置在公開程度onItemClickgetView根據我的數據。

但是,這意味着項目的高度是不同的......但是當用戶滾動具有非標準高度的視野項目時,即使其控件可見性設置爲getView

怎麼辦?有沒有辦法強制重新計算高度?

 public View getView(int position, View convertView, ViewGroup parent) { 

      View view = convertView; 

       if(null == view) 
       { 
         LayoutInflater vi = (LayoutInflater) thisActivityContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
         view = vi.inflate(R.layout.override_listitem_catalog, null); 
       } 

       MyListItemExt data = objects.get(position); 


       if(null != data) 
       { 
              // ... do work 
       } 
+1

問題可能是因爲convertview的。發佈您的代碼 – user936414

+0

現在發佈的代碼:) – Tom

+1

我會嘗試不使用「if(null == view)」,不知道爲什麼你需要那個性能的原因? –

回答

1

滾動列表視圖時,滾動的行將被重用並填充新數據。根據你的邏輯,當你設置列表項按鈕的可見性時,當你滾動列表並再次到達這個位置時,這行的狀態將不會被保留,因爲視圖正被重用。

你必須保持列表視圖的點擊位置在一個HashMap或布爾數組(如果項目列表中的數小於)使得位置索引爲true。在getView中,檢查位置是否已經用布爾值數組單擊。如果爲true,則使按鈕可見。否則使它們不可見。有關如何使用它們一個清晰的思路檢查我的答案https://stackoverflow.com/a/13083795/936414

+0

正如我寫的在我的第一篇文章中,我跟蹤了我自己的數據結構(**代碼中的**數據**引用)的可見性以及每次在** getView **代碼中設置控件的可見性。這可以工作,據我所知,**高度**然而不是:( – Tom