在Android中为动态创建的按钮实现OnClickListener

use*_*092 11 android android-widget android-layout

我通过代码而不是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);
     }
Run Code Online (Sandbox Code Playgroud)


我没有找到一种方法可以为每个按钮实现OnClickListener,以便我可以根据我得到的引用执行操作.
任何人都可以帮我解决这个问题.?
提前致谢,

Bor*_*jev 29

请参阅以下代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

我的例子很简单,但演示了如何将按钮索引放入OnClickListeber.您可以访问final声明的匿名类中的任何字段(例如OnClickListener).

  • @ Dr.aNdRO简单回答的逻辑问题.为了拥有不同的功能,您需要定义不同的OnClickListener.以你喜欢的任何方式做它,并将它们填入数组`OnClickListener [] listeners`.然后在for do`btn.setOnClickListener(listeners [i]);`中 (2认同)

Sam*_*iya 7

   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);
     }
Run Code Online (Sandbox Code Playgroud)

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

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

        }
    };
Run Code Online (Sandbox Code Playgroud)