0

EditText ボックスと Button を含むようにカスタマイズされた ListView があります。ListView では、テキスト ボックスは として表示されますvisibleが、ボタンは として表示されますinvisible。ユーザーが ListView 内の項目をクリックすると、Button が表示されます。ListView 用に次のコードを記述しました。

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

上記のコードは、最初のアイテムの Button と 2 番目のアイテムの Button が表示されている場合に機能します。

私の問題:
ListView の次の項目をクリックすると、現在の項目の Button が表示されるため、前の項目の Button が非表示になるはずです。では、前のアイテムのビューを更新するにはどうすればよいでしょうか?

4

2 に答える 2

4

前の行をクラス変数に格納します。

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;
于 2012-08-28T04:52:54.917 に答える
0

リストビュー自体ではなく、ボタンにリスナーをアタッチします。getview() メソッドでそれを行うことができます。

于 2012-08-28T04:52:10.637 に答える