12

XMLからではなく、コードを使用して動的にボタンを作成しました。
コードは以下の通りです:

    dynamicview = (LinearLayout)findViewById(R.id.llayout);
     LinearLayout.LayoutParams lprams = new LinearLayout.LayoutParams(
             LinearLayout.LayoutParams.WRAP_CONTENT,
             LinearLayout.LayoutParams.WRAP_CONTENT);

     for(int i=0;i<nob;i++){
         Button btn = new Button(this);
         btn.setId(i+1);
         btn.setText("Button"+(i+1));
         btn.setLayoutParams(lprams);
         dynamicview.addView(btn);
     }


取得した参照に基づいてアクションを実行できるように、これらの各ボタンにOnClickListenerを実装する方法が見つかりません。
誰かがこの問題を整理するのを手伝ってくれますか??
前もって感謝します、

4

6 に答える 6

30

以下のコードを参照してください。

for(int i=0;i<nob;i++) {
    Button btn = new Button(this);
    btn.setId(i+1);
    btn.setText("Button"+(i+1));
    btn.setLayoutParams(lprams);
    final int index = i;
    btn.setOnClickListener(new OnClickListener() {
        void onClick(View v) {
            Log.i("TAG", "The index is" + index);
        }
    });
    dynamicview.addView(btn);
}

私の例は非常に単純ですが、ボタンインデックスをに取得する方法を示していますOnClickListeberfinal宣言された匿名クラスの任意のフィールドにアクセスできます(例:) OnClickListener

于 2012-05-20T13:07:25.027 に答える
8
   for(int i=0;i<nob;i++){
         Button btn = new Button(this);
         btn.setId(i+1);
         btn.setText("Button"+(i+1));
         btn.setOnClickListener(btnclick); <<<<<<<set click
         btn.setLayoutParams(lprams);
         dynamicview.addView(btn);
     }

そして、このlistnerをanyメソッドの外とクラスの中に追加します

 OnClickListener btnclick = new OnClickListener() {

        @Override
        public void onClick(View view) {

            switch(view.getId()){
              case 1:
               //first button click
              break;
               //Second button click
              case 2:
              break;
              case 3:
               //third button click
              break;
              case 4:
               //fourth button click
              break;
            .
            .
            .
             default:
              break;
              }

        }
    };
于 2012-05-20T13:05:54.543 に答える
2

を使用して、作成したsをListそれに追加しますButtonList

List<Button> list = new ArrayList<Button>();

次に、そのリストにボタンを追加します

for(int i=0;i<nob;i++){
         Button btn = new Button(this);
         btn.setId(i+1);
         btn.setText("Button"+(i+1));
         btn.setLayoutParams(lprams);
         dynamicview.addView(btn);
         list.add(btn);
     }

次に、高度なforループを使用してリストを反復処理し、各ボタンにクリックリスナーを追加します。

for(Button btn : list){
btn.setOnClickListener(this);
}
于 2012-05-20T13:07:34.200 に答える
2

おそらくこれは、動的に作成されたボタンのグループに1つのカウンター変数を使用したい人にとって役立つでしょう。

カウンターの配列を作成しました。

int[] squatReps;

好みから私は要素の量を取りました:

squatReps = new int[squatSets];  // where squatSets is taken from preferences

そして最後にボタンを作成します

for (int i = 0; i < squatSets; i++){
                squatReps[i] = Integer.parseInt(sharedPreferences.getString("squats_reps", "0"));
                final Button squat_b = new Button(this.getActivity());
                squat_b.setId(i);
                squat_b.setText("");
                squat_b.setLayoutParams(layoutParams);
                final int index = i;
                squat_b.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        squat_b.setText(Integer.toString(squatReps[index]--));    
                        startTimer();                                
                    }
                });
                panel_1.addView(squat_b);
于 2017-06-15T12:29:03.790 に答える
1

それは同じことです...

for(int i=0;i<nob;i++){
         Button btn = new Button(this);
         btn.setId(i+1);
         btn.setText("Button"+(i+1));
         btn.setLayoutParams(lprams);
         btn.setOnCLickListsener(new listener());
         dynamicview.addView(btn);
     }

listener implemnets OnClickListenere{

public void onClick(View v){

}

}

于 2012-05-20T13:05:58.893 に答える
1
for(int i=0;i<nob;i++){
         Button btn = new Button(this);
         btn.setId(i+1);
         btn.setText("Button"+(i+1));
         btn.setLayoutParams(lprams);
         btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
               /////Do some job on button click
            }
        }); 
         dynamicview.addView(btn);
     }
于 2012-05-20T13:06:58.960 に答える