Implementing OnClickListener for dynamically creat

2019-01-17 08:57发布

I dynamically created buttons through code rather than from XML.
The code is as below :

    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);
     }


I am not finding a way in which I can implement OnClickListener to each of these buttons so that I can perform action based on the reference I get.
Can anyone help me in sorting out this issue. ?
Thanks in Advance,

6条回答
一夜七次
2楼-- · 2019-01-17 09:08
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);
     }
查看更多
男人必须洒脱
3楼-- · 2019-01-17 09:13

See the code below:

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);
}

My example is pretty simple, but demonstrates how you can get the button index into the OnClickListeber. You can access any final field in the declared anonymous classes (e..g the OnClickListener).

查看更多
别忘想泡老子
4楼-- · 2019-01-17 09:18

its the same thing...

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){

}

}

查看更多
再贱就再见
5楼-- · 2019-01-17 09:26
   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);
     }

And add this listner outside the any method and inside class

 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;
              }

        }
    };
查看更多
Luminary・发光体
6楼-- · 2019-01-17 09:26

Use a List and add Buttons you create to that List

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

Now add your button to that List

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);
     }

Then use advanced for loop to iterate through the list and add click listener for each Button..

for(Button btn : list){
btn.setOnClickListener(this);
}
查看更多
欢心
7楼-- · 2019-01-17 09:34

Maybe this will be helpful for somebody I wanted to use the one counter variable for group of dynamically created buttons:

I've created the array for counters:

int[] squatReps;

From preferences I've taken the quantity of elements:

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

And finally we create the buttons

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);
查看更多
登录 后发表回答