我正在设置一个点击监听器,我想知道这是否可以做到这一点?我看到很多人将onClickListener定义为与setOnClickListener一致,但这看起来非常混乱,所以我想知道我是否会遇到任何问题,这样做会不会发生这种情况?
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;
}
}
答案 0 :(得分:3)
您如何定义它是您个人编码风格的选择。您可以让整个类实现接口,内联,按照您的方式执行,或指定要通过XML调用的方法。最终结果或多或少相同。
答案 1 :(得分:0)
如果您希望将所有onclicklistener方法保留在一个方法中,则可以实现该方法。为此你做
login.setOnClickListener(本);
然后
extends Activity implements OnClickListener
最后,您将添加未实现的方法。这会将所有按钮单击传递给onclick方法,您可以使用if / else或switch / case分配任何方法。
或者,您也可以使用XML定义它或使用您描述的方法。
然而,要了解优点和缺点:在xml中定义onClick可能会导致proguard出现问题。就个人而言,我觉得最简单的是在onclicklistener中使用一个开关和case,但是如果这个方法要长得多,那么给它自己的方法很好,以便“隐藏”它。但是,如果您需要在按下任何按钮后运行公共代码(例如UI刷新),最好将其留给交换机和案例或if / else
//只为想要在xml和proguard中使用OnClick的人添加
添加:
-keepclassmembers class * extends android.app.Activity { public void *(android.view.View); }
答案 2 :(得分:0)
在视图上实现onClickListner
有多种方法。您使用的内容也是正确的,不会给您带来任何问题。我个人更喜欢让类实现OnClickListener interface
并在覆盖onClick方法中使用switch case scenario。
e.g。
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;
}
}
答案 3 :(得分:0)
取决于您的代码风格,仍然是:
想要对很多按钮使用相同的方法:让类实现监听器接口,并使用视图id上的开关来找出点击的按钮。
点击后非常复杂的逻辑:让内部/外部类实现该侦听器。
几行,没什么特别的:做内联,阅读代码的人不需要去寻找一小段代码。