如下代码,onCreate是一个函数,onClick也是一个函数,两者本来是毫无关系的,为什么要嵌套在一起呢? 如果onClick里面的代码很长很复杂,整个onCreate函数也会很长,很古怪。程序代码不仅是给机器处理的,也是给人看的。难道android的设计者们觉得这样的代码风格很好? 为什么不把onClick移到外面,两个函数的代码互不干扰?private Button button1;public void onCreate(Bundle savedInstanceSate)
{
    //... ... 其他代码    button1.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v)
        {
            //... ...
        }
    });
}

解决方案 »

  1.   

    onCreate可不是普通的函数,看Activity生存周期
      

  2.   

    重新写一个类 实现 OnClickListener  然后你的button.setOnClickListener(new 一个你重新写的那个类)
    然后在重写 onClick函数 通过 v.getid()匹配id 进行判断操作
      

  3.   

    可以坐在一个方法里,或者你自己在新建一个View……
      

  4.   

       囧  。 这只是一个局部监听器额。 再说这也不是android设计者搞出来的,只是程序员这样做的。    你想在任何设置监听器都行的啊。
      
      
        这说明,你看android代码比较少。如果多了话,就该知道有很多种写法了。
      

  5.   

    button1.setOnClickListener(this);
    ......在onCreate()之外写一个listener就OK了
      

  6.   


    通过这样设置监听器比较常见,这是JAVA本身的机制,如果处理的代码比较多,可以把处理的代码封装到一个函数,甚至封装到一个对象里:
    private Button button1;public void onCreate(Bundle savedInstanceSate)
    {
    //... ... 其他代码button1.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v)
    {
        handleButton1Click();
    }
    });
    }private void handleButton1Click(){
       ..........
    }
      

  7.   

    可以让你的Activity继承OnClickListener,然后绑定事件时使用:
    btn1.setOnClickListener(this);然后在实现方法里判断
    if(view == btn1){
    }
    else if(view == btn2)
    {
    |
      

  8.   

    你可以定义个按钮监听的内部类
    class btnOnClickListener implements OnClickListener { public void onClick(View v) 
                    {

    }
    }在oncreate 里设置监听
    button1.setOnClickListener(new btnOnClickListener());
      

  9.   

    private Button button1;public void onCreate(Bundle savedInstanceSate)
    {
    //... ... 其他代码button1.setOnClickListener(onMyClickListener);
    }private View.OnClickListener onMyClickListener= new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //......
            }
        };
      

  10.   

    private Button button1;
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.safe_main);
              button1 = findViewByid(R.id.xx);
              button1.setOnClickListener(listenter); 
    }
    private final View.OnClickListener listenter = new View.OnClickListener() {
    public void onClick(View view) {
                   if(view==button1){
                    处理事件.....
                   }else if(view==otherButton){
    }
    }
      

  11.   

    那个监听器无非也就是一个内部类写到哪里都一样的啊public class abc extends Activity{
    private Button button1;public void onCreate(Bundle savedInstanceSate)
    {
          //... ... 其他代码      button1.setOnClickListener(new OnclickEven ())
    }
    public class OnclickEven implements OnClickListener{ public void onClick(View v) {
    // TODO Auto-generated method stub
        do some thing;
             }

         }
    }
    就是这样,还有你的那个写法,还有楼上的好多都可以啊,代码如果多的话就可以这样写到外面,其实想怎么写还不是随你高兴!
      

  12.   

    Java的机制,但是很多程序员拿这个当借口,把代码搞得一塌糊涂。很多人都是为了实现功能而编码,基本上不去考虑代码的可读性。
      

  13.   

     android设计者程序员 把代码搞得一塌糊涂 代码有事不好用
      

  14.   

    直接在xml里配android:onclick="aaa",然后直接public void aaa(View v){...} 也可以啊.不过要android1.6以上才行
      

  15.   

    1、可以让你这个Activity实现OnClickListener,这样重写onClick方法就可以写在onCreate外面了,只是要在onCreate里面写明button1.setOnClickListener(this),然后在外面的onClick方法中,通过判断view.getId()的值是否与button1的id匹配。
    2、可以自己写一个button1Click()方法,把点击后要实现的内容写在这个里面,然后在onCreate方法中的onClick方法中调用自己的写的这个方法。
    3、可以在该Activity调用的xml文件中,给这个控件设置onClick属性,该属性中的值就是该控件被点击后会调用的方法是名称。不过在你的Activity中写这个方法的时候,必须要设置一个View的参数,该参数就表示这个控件。