一个activit里有好多button  只能用循环来创建 这些button问题来了  如何给每个button都加上监听器????难道每个button都需要写死吗?
代码如下public class GuessNumberActivity extends Activity {
    /** Called when the activity is first created. */
int ButtonNum = 0;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        LinearLayout main = (LinearLayout)findViewById(R.id.main);
        
        TableLayout table = (TableLayout)findViewById(R.id.tablelayout);
        TableRow tablerow;
        
     Button[] BotArray = new Button[81];
    
        
        for(int i = 0;i<9;i++)
        {
         tablerow = new TableRow(this);
         createButton(i,tablerow,table,BotArray);
        }
        
    }
    public  void createButton(int guess_number,TableRow tablerow,TableLayout table,final Button[] BotArray)
    {
     Button bn1;
    
     for(int i = 0;i<9;i++)
     {
    
     int randomNum=(int)( Math.random()*10);
     bn1 = new Button(this);  
     bn1.setTextSize((float)17.0);
     bn1.setText(randomNum+" ");
     bn1.setMaxHeight(5);
     BotArray[ButtonNum] = bn1;
     ButtonNum++;
    
    
    
     tablerow.addView(bn1);
     }
     table.addView(tablerow);   
    }
}

解决方案 »

  1. 定义一个公共函数
    private void onBtnSelectClick(Button btn){
    btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Button button = (Button)v;
    if(button.getId()==R.id.btnTxtBack){
    finish();
    }else if(button.getId()==R.id.btnTxtSend){
    }else if(button.getId()==R.id.btnTxtSelPer){
    }
    }
    });
    统一调用就完了,如果你要使用button的某一个公共属性,处理上没区别的话就不需要加if条件了。
      

  2. 同楼上的思路: @Override
    public void onClick(View v)
    {
    switch (v.getId())
    {
    case R.id.class_mgmt_btn:
    Intent c = new Intent(this,ShowOneTable.class);
    startActivity(c);
    break;
    case R.id.student_mgmt_btn:
    showTodoDlg();
    break;
    case R.id.parent_mgmt_btn:
    showTodoDlg();
    break;
    case R.id.notes_mgmt_btn:
    showTodoDlg();
    break;
    }
    }
      

  3. 让你的Activity 实现这个接口: implements OnClickListener
     
    然后,在OnClick()方法中直接取到id,然后针对该view(其实Button也是一个View),你想干什么就干什么.
     
    而不是针对每个Button去绑定响应方法.
      

  4. ++这个是最好的方法,谁叫你button多呢
      

  5. 不不,应该另外写一个listener,不要代码都写到activity上
      

  6. 对,不要都写在Activity里面,可读性很差......方法楼上都说了,不在多说
      


  7. 我在avtivit里的onClick函数实现了 可是按button   一点反应都没有啊
    代码如下public class Test1Activity extends Activity implements OnClickListener{
        /** Called when the activity is first created. */
    Button bn;
    Button[] bnArrey = new Button[81];
    int buttonnum = 0;
    TableRow tablerow;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
                    
            TableLayout table = (TableLayout)findViewById(R.id.tablelayout);
            
    for(int i=0;i<9;i++)
    {
    tablerow = new TableRow(this);
    create(table,tablerow);
    }

            
        } @Override
    public void onClick(View v) {
    int i = (Integer) v.getTag();

    Button bnn = (Button)v;
    for(int bnnum = 0;bnnum < bnArrey.length;bnnum++)
    {
    System.out.println(bnnum);
    if(i == (Integer)bnArrey[bnnum].getTag())
    {
    bnn.setText("10");
    }
    }
    }

    public void create(TableLayout table,TableRow tablerow)
    {
    for(int i = 0;i<9;i++)
    {
    bnArrey[buttonnum] = new Button(this);
    bnArrey[buttonnum].setText(i+"");
    bnArrey[buttonnum].setTag(buttonnum);
    tablerow.addView(bnArrey[buttonnum]);
    buttonnum++;
    }

    table.addView(tablerow);
    }




    }
      

类似问题 »