我正在设置一个点击监听程序,我想知道这是不是一个可以做到的方式?我看到很多人按照setOnClickListener来定义onClickListener,但这看起来真的很混乱,所以我想知道这样做会不会遇到任何问题?
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;
}
}发布于 2012-12-26 01:57:34
你如何定义它是你个人的编码风格选择。您可以让整个类实现接口,内联执行它,按您正在做的方式执行它,或者指定要通过XML调用的方法。最终结果大同小异。
发布于 2012-12-26 02:04:28
如果你想把所有的onclicklistener方法都放在一个方法中,你可以实现这个方法。为此,您可以这样做
login.setOnClickListener(这);
然后
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);}
发布于 2012-12-26 02:09:26
在视图上实现onClickListner有多种方法。您使用的内容也是正确的,不会给您带来任何问题。我个人更喜欢让类实现OnClickListener interface,并在重写onClick方法中使用大小写切换场景。
例如:
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;
}
}https://stackoverflow.com/questions/14032839
复制相似问题