2015-05-20 103 views
0

我有ListView,我想隱藏一些項目,我用view.setVisibility(View.INVISIBLE)它運行良好,但是當ListView有很多項目和我滾動然後幾個項目後,再次是隱形項目。Android隱形ListView項目

適配器:

public void setIndexHidenItem(int index){ 
    indexHidenItem = index; 
} 

public View getView(final int index, View view, ViewGroup group) { 

    if (view == null) { 
     view = LayoutInflater.from(mainContext).inflate(R.layout.hlist_item_template, null); 
    } 

更改公開:

if (indexHidenItem != -1){ 
     if (index == indexHidenItem){ 
      if (view.getVisibility() == View.VISIBLE) { 
       view.setVisibility(View.INVISIBLE); 
      } 
     }else{ 
      if (view.getVisibility() == View.INVISIBLE){ 
       view.setVisibility(View.VISIBLE); 
      } 
     } 
    } 

回答

0

原因:

這是一個傳統的錯誤。您正在使用ViewHolder模式,它爲幾個listview項目重複使用相同的視圖,並以某種方式獲取視圖並更改它的屬性,這將反映在每次重新使用此視圖的listview項目上。

解決方案:

你應該在你的數據存儲記錄(ArrayList中,HashMap的,SparseArray,....),這種觀點是不可見的,並呼籲適配器的notifyDataSetChanged(適配器),並在你的適配器的getView()您將需要檢查可見性並根據此情況進行更改。

+0

謝謝,它的工作=) – Aleksandr

0

當你隱藏你應該記住哪個項目是不可見的,在適配器的getView()方法,你應該檢查一下當前的項目應該是可見的項目或不,並再次設置可見性。這是因爲你的ListView重用的項目引起的,convertView它傳遞給你的getView()方法實際上是你以前初始化項目

之一
0

您可以在適配器內使用getItemViewType()This example向您展示如何使用它。但不是改變視圖,你可以隱藏它。這樣它就不會顯示/隱藏它不應該的視圖