我在片段中有3个按钮,我想使用相同的点击事件。如何在片段中实现这一目标?
XML
<Button
android:id="@+id/btn_1"
android:onClick="btnClick_DoSomething"
android:text="@string/one"/>
<Button
android:id="@+id/btn_2"
android:onClick="btnClick_DoSomething"
android:text="@string/two"/>
<Button
android:id="@+id/btn_3"
android:onClick="btnClick_DoSomething"
android:text="@string/three"/>
爪哇
@Override
public void btnClick_DoSomething(View v) {
}
错误
@Override
(在片段Java类中)变为红色下划线,并返回以下错误
这里不允许出现咒语
我希望所有3个按钮的onClick事件都相同
答案 0 :(得分:1)
您不需要编写@Override注释,因为您没有覆盖该方法。只需使用
public void btnClick_DoSomething(View v) {
}
您将在运行时获得此方法的回调。
答案 1 :(得分:0)
您尝试覆盖哪种方法?任何父类都有方法btnClick_DoSomething
吗?从布局XML设置单击侦听器时,您不需要覆盖任何内容。只需确保在将使用此布局的活动类中存在具有void返回类型和View作为其唯一参数的同名方法
在同一个onClick处理程序中区分不同视图的点击次数的一般方法是通过id
识别它们public void btnClick_DoSomething(View v){
switch(v.getId()){
case R.id.btn_1:
// handle click from button 1
break;
case R.id.btn_2:
// handle click from button 2
break;
case R.id.btn_3:
// handle click from button 3
break;
}
}
答案 2 :(得分:-1)
这里有一些误解。要覆盖Click事件,您的Fragment
需要实现View.OnClickListener
界面,如下所示:
public class YourFragment extends Fragment implements View.OnClickListener{
@Override
public void onClick(View v) {
}
}
请注意,方法的名称必须为onCLick
,必须返回void并将View
作为参数从接口覆盖。在这种情况下,您需要为片段中的每个按钮设置一个监听器:
btn1 = (Button) view.findViewById(R.id.btn_1);
btn1.setOnClickListener(this);
在此方法中,您可以控制由ID
单击的对象 @Override
public void onClick(View v) {
int id = v.getId();
switch(v.getId()){
case R.id.btn_1:
// handle click from button 1
break;
case R.id.btn_2:
// handle click from button 2
break;
case R.id.btn_3:
// handle click from button 3
break;
}
}
或者,您不需要覆盖该方法,因此请删除可以正常工作的anotation:
public void btnClick_DoSomething(View v) {
switch(v.getId()){
case R.id.btn_1:
// handle click from button 1
break;
case R.id.btn_2:
// handle click from button 2
break;
case R.id.btn_3:
// handle click from button 3
break;
}
}
答案 3 :(得分:-1)
你只是不用XML来做,而是用Java来做:
<Button
android:id="@+id/btn_1"
android:text="@string/one"/>
<Button
android:id="@+id/btn_2"
android:text="@string/two"/>
<Button
android:id="@+id/btn_3"
android:text="@string/three"/>
...然后
private final OnClickListener onClick = new OnClickListener(){
@Override
public void onClick(View view){
switch(view.getId()){
... cases...
}
}
somewhere initialising the views you do:
fragmentView.findViewById(R.id.btn_1).setOnClickListener(onClick);
fragmentView.findViewById(R.id.btn_2).setOnClickListener(onClick);
fragmentView.findViewById(R.id.btn_3).setOnClickListener(onClick);
}
答案 4 :(得分:-1)
不是在xml布局文件中声明onClick方法,而是让Fragment实现View.onClickListener接口,覆盖onClick()
,并在onClickListener上设置所有3个按钮,如btn.setOnClickListener(this)
。将所有3个按钮的行为放在onClick()
中。所有3将具有相同的行为(除非您在onClick()
中检查事件来自哪个按钮)。