首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >安卓按钮setOnClickListener设计

安卓按钮setOnClickListener设计
EN

Stack Overflow用户
提问于 2011-04-08 07:30:07
回答 9查看 165.3K关注 0票数 49

我正在构建一个Android应用程序。我已经注意到我在我的每个类中创建了许多与此类似的重复代码:

代码语言:javascript
复制
Button buttonX = (Button)findViewById(R.id.buttonXName);
// Register the onClick listener with the implementation above
buttonX.setOnClickListener(new OnClickListener() {
    public void onClick(View v)
    {
        //DO SOMETHING! {RUN SOME FUNCTION ... DO CHECKS... ETC}
    } 
});

我现在有15个按钮,这使得我的代码很难看。有没有人有关于如何将所有这些代码转换成更有效的代码的类或示例,这样我就可以:

如果单击并运行每个按钮的特定代码,请为监听器{buttonX.setOnClickListener(new OnClickListener()}

  • Determine创建按钮对象?

如果有人知道什么,我将不胜感激。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-04-08 07:52:22

如果你的目标是1.6或更高版本,你可以使用android:onClick xml attribute来删除一些重复的代码。参见Romain Guy的this blog post

代码语言:javascript
复制
<Button 
   android:height="wrap_content"
   android:width="wrap_content"
   android:onClick="myClickHandler" />

在Java类中,使用以下代码行:

代码语言:javascript
复制
class MyActivity extends Activity {
    public void myClickHandler(View target) {
        // Do stuff
    }
}
票数 56
EN

Stack Overflow用户

发布于 2011-04-08 07:47:22

在您的活动上实现OnClickListener() ...

代码语言:javascript
复制
public class MyActivity extends Activity implements View.OnClickListener {
}

对于每个按钮使用...

代码语言:javascript
复制
buttonX.setOnClickListener(this);

在您的活动onClick()方法测试中,它是哪个按钮...

代码语言:javascript
复制
@Override
public void onClick(View view) {
    if (View.equals(buttonX))
        // Do something
}

另外,在onClick中,您可以使用view.getId()来获取资源ID,然后在switch/case块中使用它来标识每个按钮并执行相关的操作。

票数 28
EN

Stack Overflow用户

发布于 2013-05-08 03:16:37

Android lambada解决方案

代码语言:javascript
复制
public void registerButtons(){
    register(R.id.buttonName1, ()-> {/*Your code goes here*/});
    register(R.id.buttonName2, ()-> {/*Your code goes here*/});
    register(R.id.buttonName3, ()-> {/*Your code goes here*/});
}

private void register(int buttonResourceId, Runnable r){
    findViewById(buttonResourceId).setOnClickListener(v -> r.run());
}

交换机案例解决方案解决方案

代码语言:javascript
复制
public void registerButtons(){
    register(R.id.buttonName1);
    register(R.id.buttonName2);
    register(R.id.buttonName3);
}

private void register(int buttonResourceId){
    findViewById(buttonResourceId).setOnClickListener(buttonClickListener);
}

private OnClickListener buttonClickListener = new OnClickListener() {

    @Override
    public void onClick(View v){
        switch (v.getId()) {
            case R.id.buttonName1:
                // TODO Auto-generated method stub
                break;
            case R.id.buttonName2:
                // TODO Auto-generated method stub
                break;
            case View.NO_ID:
            default:
                // TODO Auto-generated method stub
                break;
        }
    }
};
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5588804

复制
相关文章

相似问题

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