9

ボタンの ArrayList があり、OCL はどのインデックスが押されたかを知る必要があります。計画は次のようなものです。

MyOnClickListener onClickListener = new MyOnClickListener() {

        @Override
        public void onClick(View v) {

            Intent returnIntent = new Intent();
            returnIntent.putExtra("deleteAtIndex",idx);
            setResult(RESULT_OK, returnIntent);
            finish();

        }
    };
    for (int i =0;i<buttonList.size();i++) {
        buttonList.get(i).setText("Remove");
        buttonList.get(i).setOnClickListener(onClickListener);
    }

OCL の実装はどのように見える必要がありますか?

現在、私はこれを持っています:

public class MyOnClickListener implements OnClickListener{

int index;

public MyOnClickListener(int index)
{
    this.index = index;
}

@Override
public void onClick(View arg0) {


}

}

ただし、オーバーライドされた関数だけでなく、OCL のコンストラクター内で何をする必要があるのか​​ もわかりませんonClick

4

4 に答える 4

8

setOnClickListener次のようにボタンに設定します。

buttonList.get(i).setOnClickListener(new MyOnClickListener(i));

編集 :

myOCL でアクティビティを終了する必要があります。

非アクティビティ クラスからボタン クリックでアクティビティを終了するには、カスタム OnClickListener にアクティビティ コンテキストを次のように渡す必要があります。

buttonList.get(i).setOnClickListener(new MyOnClickListener(i, Your_Current_Activity.this));

カスタム OnClickListener クラスのコンストラクターを次のように変更します。

int index;
Context context; 
public MyOnClickListener(int index,Context context)
{
    this.index = index;
    this.context=context;
}

@Override
public void onClick(View arg0) {

    // now finish Activity as\
    context.finish();
      //  OR
        // ((Activity)context).finish();
}
于 2013-03-05T11:04:59.680 に答える
3
View.OnClickListener myListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d("Button",v.getText().tostring);
    }
});

ボタンの値が表示されるので、どのインデックスであるかがわかります。

于 2013-03-05T11:07:01.147 に答える
2

forループを変更し、毎回新しいオブジェクトを作成し、コンストラクターでインデックスを渡します。

for (int i =0;i<buttonList.size();i++) {
        buttonList.get(i).setText("Remove");
        buttonList.get(i).setOnClickListener(new MyOnClickListener(i));

}

onClick メソッドでインデックスを取得できます。

于 2013-03-05T11:11:06.443 に答える