按钮setOnClickListener的最佳实践[复制]

问题描述 投票:-1回答:2

这个问题在这里已有答案:

我对“活动”按钮操作中setOnClickListener的不同用法感到困惑。我找到了各种解决方案,但我确信有一些最好/更差的方法来实现它,还有一些“因为”。

我会理解(作为主题)哪个是最好的方法,哪个(以及为什么)不是。

  1. 在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 } }); } }
  2. 在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 } }
  3. 通过链接xml文件中的函数,简单地将其作为带有参数myView的函数:

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°方式不是一个好习惯,因为框架集不支持。

如果您有更强大的良好编码解决方案,请添加它。

请尝试清除良好做法和不良做法的差异,以及为什么某些事情更正确或者是一个糟糕的解决方案。

希望这对其他人有用,我写这篇文章也是因为我读的很多帖子都很老。谢谢。

java android
2个回答
0
投票

我更喜欢在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;
         }
   }
}

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();
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.