在Android中为dynamic创build的button实现OnClickListener

我通过代码而不是从XMLdynamic创buildbutton。
代码如下:

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

我没有find一种方法,我可以实现OnClickListener的每个button,以便我可以执行基于我得到的参考操作。
任何人都可以帮助我解决这个问题。 ?
提前致谢,

Solutions Collecting From Web of "在Android中为dynamic创build的button实现OnClickListener"

请参阅下面的代码:

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

我的例子很简单,但是演示了如何让button索引进入OnClickListeber 。 您可以访问声明的匿名类(例如OnClickListener )中的任何final字段。

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

并且在任何方法和类内部添加此列表器

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

这是同一件事…

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

}

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

使用List并添加您创build到该List Button

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

现在将你的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循环遍历列表,并为每个button添加点击侦听器。

 for(Button btn : list){ btn.setOnClickListener(this); } 

也许这对我想使用一个计数器variables的dynamic创buildbutton组是有帮助的:

我已经创build了计数器的数组:

 int[] squatReps; 

从偏好我已经采取了元素的数量:

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

最后我们创buildbutton

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