我正在使用Android,似乎有两种方法可以为用户点击实现侦听器。
选项1: 当触发器是片段的XML并且它设置属性onClick时。 例如,这是一段片段视图
<Button
android:id="@+id/userClickButton"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:onClick="myOnClickListener"
android:text="Click on Me"
/>
在Activity
中设置方法MyOnClickListenerpublic void MyOnClickListener(View v) {
switch (v.getId()) {
case R.id.useerClickButton:
break;
}
}
优点:
缺点:
选项2 当xml没有onClick的属性但是在Fragment代码中
<Button
android:id="@+id/userClickButton"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Click on Me"
/>
Fragment中的Java代码
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_view, null);
Button userClickButton = (Button)root.findViewById(R.id.userClickButton);
userClickButton.setOnClickListener(new View.onClickListener() {
@Override
public void onClick(View view) {
// Something to do
}
});
}
优点:
缺点:
您认为哪一个更好? (请用论据提供答案)
答案 0 :(得分:1)
你的OnClickListener
应该在视图所在的片段中。碎片应该是基本上自治的单位。活动的作用是简单地促进碎片之间的沟通。
例如,如果您后来确定您的Fragment需要托管在另一个Activity中,那么您需要重新实现之前Activity中的所有代码。然而,如果您将Fragment视为自治,您可以轻松地将其托管在任意数量的活动中。
我认为重要的设计问题是你的Activity甚至需要知道被点击的片段中的Button。通常没有必要这样做。
答案 1 :(得分:0)
取决于。
有时最好在XML中使用“OnClick”属性并在Activty中实现它。
其他时候最好在片段中实现java监听器。这取决于按钮动作。
如果此按钮操作仅影响片段的视图(例如:显示或隐藏另一个片段的视图或类似内容),最好使用java侦听器,但如果此按钮影响主要活动的进程(例如:执行登录,请转到下一个活动...等...),最好在XML中实现OnClick属性。
Android的doc不喜欢其中一个...... http://developer.android.com/reference/android/widget/Button.html