2012-08-28 92 views
0

我有ListView是自定義有一個EditText框和一個按鈕。 ListView顯示文本框爲visible,但按鈕​​爲invisible。當用戶點擊ListView中的一個項目時,按鈕變得可見。我寫了下面的代碼爲ListView:在案件更新列表查看以前點擊的項目

public void onItemClick(AdapterView<?> list, View view, int position, long id) {  
    view.findViewById(R.id.button).setVisibility(View.VISIBLE); 
} 

上面的代碼功能,當第一個項目的按鈕和第二項的按鈕是可見的。

我的問題:
當單擊ListView中的下一個項目,從上一個項目的按鈕應該作爲當前項目的按鈕變成可見不可見。那麼如何更新前一個項目的視圖?

回答

3

商店上一行類變量:

View previous; 
... 

public void onItemClick(AdapterView<?> list, View view, int position, long id) {  
    if(previous != null) 
     previous.setVisibility(View.INVISIBLE); 

    // Set the current button to visible while saving it for the next click 
    previous = view.findViewById(R.id.button); 
    previous.setVisibility(View.VISIBLE); 
} 

加成從評論

你說得對。適配器的觀點回收是影響其他行讓我們擴展你使用任何適配器,並覆蓋其getView()方法:

public int selectedRow = -1; 
... 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = super.getView(position, convertView, parent); 

    // Here, either use findViewById() (slower) or the ViewHolder method (faster) to load the button: 
    // Button button = ... 

    if(position == selectedRow) 
     button.setVisibility(View.VISIBLE); 
    else 
     button.setVisibility(View.GONE); 

    return view; 
} 

而在你onItemClick()方法中添加這樣一行:

adapter.selectedRow = position; 
+0

上面的代碼在說話。感謝名單。但是佈局的大小增加了。我怎樣才能使它達到原來的尺寸? –

+0

完成!而不是View.INVISIBLE,我已經轉換成View.GONE。 –

+0

存在問題。當我向下滾動時,該按鈕在下面的第二項中是可見的。我認爲這個觀點正在得到回收。有什麼建議麼? –

0

在按鈕上附加一個監聽器,而不是列表視圖本身。你可以在getview()方法中做到這一點。