首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置onClickListener

设置onClickListener
EN

Stack Overflow用户
提问于 2012-12-26 01:56:13
回答 4查看 928关注 0票数 1

我正在设置一个点击监听程序,我想知道这是不是一个可以做到的方式?我看到很多人按照setOnClickListener来定义onClickListener,但这看起来真的很混乱,所以我想知道这样做会不会遇到任何问题?

代码语言:javascript
复制
public class Login extends Activity {

protected Button login;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    login = (Button) findViewById(R.id.loginButton);
    login.setOnClickListener(myOnClick());
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_login, menu);
    return true;
}

protected OnClickListener myOnClick() {
    OnClickListener v = new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            //Do stuff
        }
    };

    return v;
}

}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-26 01:57:34

你如何定义它是你个人的编码风格选择。您可以让整个类实现接口,内联执行它,按您正在做的方式执行它,或者指定要通过XML调用的方法。最终结果大同小异。

票数 3
EN

Stack Overflow用户

发布于 2012-12-26 02:04:28

如果你想把所有的onclicklistener方法都放在一个方法中,你可以实现这个方法。为此,您可以这样做

login.setOnClickListener(这);

然后

代码语言:javascript
复制
extends Activity implements OnClickListener

最后,您将添加未实现的方法。这将把你所有的按钮点击传递给onclick方法,你可以使用if/else或switch/case来分配任何方法。

或者,您也可以在XML中定义它,或者使用您所描述的方法。

但是,深入分析它的优点和缺点:在XML语言中定义onClick可能会导致proguard出现问题。就我个人而言,我觉得最简单的方法是在onclicklistener中使用开关和case,但如果方法太长,那么给它自己的方法是很好的,这样就可以“隐藏”它。但是,如果您需要在按下任何按钮(例如,UI刷新)后运行通用代码,最好将其留给一个开关和大小写或if/else

//仅为那些想要在xml中使用OnClick的人添加

添加以下内容:

公有类*扩展了android.app.Activity { -keepclassmembers void *(android.view.View);}

票数 0
EN

Stack Overflow用户

发布于 2012-12-26 02:09:26

在视图上实现onClickListner有多种方法。您使用的内容也是正确的,不会给您带来任何问题。我个人更喜欢让类实现OnClickListener interface,并在重写onClick方法中使用大小写切换场景。

例如:

代码语言:javascript
复制
public class LoginExampleImplements extends Activity implements OnClickListener { 


    @Override
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 

    ...         

        btn1 = (Button)findViewById(R.id.btn1);
        btn2 = (Button)findViewById(R.id.btn2);

// Set Click Listener 


        btn1.setOnClickListener(this); 
        btn2.setOnClickListener(this); 
    } 

    @Override
    public void onClick(View v) { 

        switch(v.getId()){
           case R.id.btn1:
             // do stuff related btn1 click
             break;
           case R.id.btn2:
             // do stuff related btn2 click
             break;
         }

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14032839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档