我对“活动”按钮操作中setOnClickListener
的不同用法感到困惑。
我找到了各种解决方案,但我确信有一些最好/更差的方法来实现它,还有一些“因为”。
我理解(作为主题)这是最好的方法,哪些(以及为什么)不是。
在activity(class)中调用私有函数并设置监听器及其中的所有强制转换:
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
}
});
}
}
在activity中设置setOnClickListener,然后调用相应的函数: (在这种情况下,我不明白为什么视图在onClick中定义为 final )
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"
ON MAINACTIVITYCLASS:
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°方式不是一个好习惯,因为框架集不支持。
如果您有更强大的良好编码解决方案,请添加它。
请尝试清除良好做法和不良做法的差异,以及为什么某些事情更正确或者是一个糟糕的解决方案。
希望这对其他人有用, 我写这篇文章也是因为我读的很多帖子都很老了。 谢谢。
答案 0 :(得分:1)
我建议使用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();
}
}
答案 1 :(得分:0)
我更喜欢在xml布局中设置onclick的方法,并定义switch块来处理基于id的不同事件。与使用一堆匿名内部类相比,此方法更具可读性并且具有更好的性能。
*