2

3 つのボタンを含むレイアウトである ListView があるとします。ユーザーが項目番号 5 の 2 番目のボタンなどをクリックしたことを効率的に知るにはどうすればよいですか?

また、2 番目の質問: その getView メソッドを使用するアダプターがある場合、アダプターではなくアクティビティ クラスでクリック イベントを処理するにはどうすればよいですか?

乾杯、

4

4 に答える 4

4

これを行うには、実際には多くの方法があります。

  • どのボタンに接続されているかを知っているボタンごとにクリックアダプターを作成できます。
  • クリック ハンドラーが識別して操作する各ボタンに、一意のタグを付けることができます。
  • Buttonクリックハンドラーに何をすべきかを伝えるコードにそれぞれをリンクするArrayListを構築できます...- Alexanderが言うように、ボタンを処理するListViewのカスタムアダプターを作成できます。このメソッドを使用する場合は、onClick ハンドラを

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // Create all the Views, Buttons, etc
    
        // Create the click handlers:
        button1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                doButtonOneClickActions(position);
            }
         });
    }
    
    private void doButtonOneClickActions(int rowNumber) {
        // Do the actions for Button one in row rowNumber (starts at zero)
    }
    

どちらのソリューションを選択するかは、コードの残りの部分 (および好みのコーディング スタイル) によって異なります。

于 2013-07-23T19:25:09.263 に答える
2

この目的のために、ListView. 次にオーバーライドしますgetView

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
//here you define your button's click events.
//use position parameter to get actual position of current row layout in 
// the list
 }
于 2013-07-23T19:19:58.917 に答える
1

私が今やっているように、あなたがリスト項目に 3 つのボタンを入れてくれたなんて、なんて素晴らしいことでしょう! 私もコーディング スタイルを探しています (必ずしも解決策ではありません)。とにかく、私は次のことを目指します。

  1. パフォーマンス
  2. 再利用性
  3. 疎結合 (ただし凝集性が高い)

クリック ハンドラーを外部インスタンスに委任します。外部インスタンスは、次を使用して定義され、アダプターに接続されます。

public class MyListAdapter extends BaseAdapter {
    View.OnClickListener listener = null;

    public View getView(...) {
        buttonA.setOnClickListener(listener);
        buttonB.setOnClickListener(listener);
        buttonC.setOnClickListener(listener);
    }
    public void setItemClickListener(View.OnClickListener listener) {
        this.listener = listener;
    }
}

どのボタンがクリックされたかを識別するのは、リスナーの仕事です。MyListAdapter からリスナーにデータを渡したり、アプリケーション ロジックの一部としてリスナー コードを合理化したりするなど、さらに多くの問題に対処する必要があります。

于 2014-04-06T06:25:12.233 に答える
1

カスタム アダプタとオーバーライドgetView(int position, View convertView, ViewGroup parent)メソッドを作成し、そこでボタンを参照して設定する必要がありますonClickListeners。そこにpositionはリスト行があり、必要なものがすべて揃っています。

于 2013-07-23T19:26:03.177 に答える