2013-06-11 46 views
0

我有listview百項。每個項目都有一對LinearLayouts,但其中一個是Visibility.GONE!每個項目都有文字瀏覽和圖像。在圖像點擊我想設置LinearLayout visible.Gone to View.VISIBLE。它工作正常,直到你向下滾動列表視圖,然後每個第4項具有相同的佈局設置爲可見,但我只需要單擊一個!這裏是getView方法:Android:ListView改變錯誤的行佈局的可見性

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    final ImageView imgForClick; 
    View vi = convertView; 
    if (convertView == null) 
     vi = inflater.inflate(R.layout.custom_row, null); 
    final LinearLayout hiddenLayout = (LinearLayout)vi.findViewById(R.id.hiddenLayout); 

    imgForClick = (ImageView)vi.findViewById(R.id.imageView3); 
    imgForClick.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      hiddenLayout.setVisibility(View.VISIBLE); 
     } 
    }); 
    return vi; 
} 

回答

2

那是因爲你是回收的意見,所以佈局得到改變上單擊,然後是佈局在其他行來節省內存。

你需要記住每一行的狀態就知道佈局是否應該可見或不可見

有這樣的事情:

public View getView(final int position, View convertView, ViewGroup parent) { 
... 
if (shouldBeVisible.get(position)) { 
    hiddenLayout.setVisibility(View.VISIBLE); 
} else { 
    hiddenLayout.setVisibility(View.GONE); 
} 

這樣的佈局總是會設置這樣或那樣的方式。

shouldBeVisible是一個List的東西,可以讓你知道哪些行應具有該佈局可見或不可見。

編輯 - 另一種方法是刪除視圖回收,但這會嚴重損害性能,不應該完成,但我只是解釋列出所有選項。

你會刪除行 if (convertView == null)

製作的Android總是誇大一個新的觀點,而不是儘可能使用再生一個。

+0

謝謝你,第一個與列表工作很好。 – user2475805

+0

讀這正是我需要提醒我的意見重用。我無法弄清楚爲什麼其他列表項的數據跳到我的ListView的頂部。 – Cyrille