【发布时间】:2017-08-25 14:17:06
【问题描述】:
我对 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 } }); } } -
在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 } } - 通过将函数链接到 xml 文件中,只需作为带有参数 myView 的函数即可:
关于 MAINACTIVITY.XML 添加:
android:onClick="onButtonClick"
关于 MAINACTIVITY 课程:
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° 方式不是一个好的做法,因为框架集不支持。
如果你有一些更强大的好编码解决方案,请添加它。
请尝试澄清好的做法和坏做法的区别,以及为什么某些事情更正确或相反是一个糟糕的解决方案。
希望这对其他人有用, 我写这篇文章也是因为我读过的很多文章都很老了。 谢谢。
【问题讨论】:
-
访问这里已经回答了。 stackoverflow.com/questions/30082892/…
-
我阅读了该帖子并尝试创建:公共类 ActivityMain 扩展 Activity 实现 View.OnClickListener .. 但我有错误:“类“MainActivity”必须声明为抽象或实现抽象方法' 'OnClickListener' 中的 onClick(view)'