这个问题在这里已有答案:
我对“活动”按钮操作中setOnClickListener
的不同用法感到困惑。我找到了各种解决方案,但我确信有一些最好/更差的方法来实现它,还有一些“因为”。
我会理解(作为主题)哪个是最好的方法,哪个(以及为什么)不是。
public class MainActivity extends AppCompatActivity {
Private Button myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
OnClickButton();
}
private void OnClickButton(){
myButton = (Button)findViewById(R.id.Button1);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// button actions
}
});
}
}
public class MainActivity extends AppCompatActivity {
Private Button myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myButton.setOnClickListener(onClickListener);
}
private OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(final View v) {
// button actions
}
}
ON MAINACTIVITY.XML ADD:
android:onClick="onButtonClick"
主要活动类别:
public class MainActivity extends AppCompatActivity {
Private Button myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onButtonClick(View v){
// button actions
}
}
注意:我发现(需要确认)3°方式不是一个好习惯,因为框架集不支持。
如果您有更强大的良好编码解决方案,请添加它。
请尝试清除良好做法和不良做法的差异,以及为什么某些事情更正确或者是一个糟糕的解决方案。
希望这对其他人有用,我写这篇文章也是因为我读的很多帖子都很老。谢谢。
我更喜欢在xml布局中设置onclick的方法,并定义switch块来处理基于id的不同事件。与使用一堆匿名内部类相比,此方法更具可读性并且具有更好的性能。
public class MainActivity extends AppCompatActivity {
Private Button myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onButtonClick(View v)
{
int id = v.getId();
switch(id)
{
case R.id.signinbutton: signin();break;
case R.id.logoutbutton: logout();break;
}
}
}
我建议使用Butterknife库进行绑定和OnClick方法。在我看来,定义它是最明确的方式。
Butterknife:http://jakewharton.github.io/butterknife/
例子:
@OnClick(R.id.submit)
public void sayHi(Button button) {
button.setText("Hello!");
}
@OnClick({ R.id.door1, R.id.door2, R.id.door3 })
public void pickDoor(DoorView door) {
if (door.hasPrizeBehind()) {
Toast.makeText(this, "You win!", LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Try again", LENGTH_SHORT).show();
}
}