我一直在StackOverflow或其他地方努力寻找解决方案,但我没有找到任何关于这个特殊问题的直接帖子,除了可能最接近的一个,我不再能找到了。不过,如果这只是因为我忽略了什么或我太菜了,那么请提前谅解。
无论如何,我正在尝试将OnTouchListener设置为ViewFlipper(父级),并将OnClickListener设置为一个填充父布局的按钮(子级)。我希望ViewFlipper的onTouch()事件首先被调用。我认为如果ViewFlipper的onTouch()返回false,则会触发Button的onClick()。然而,实际上只有Button的onClick()被调用了。为什么?是否有定义好的优先级?
作为替代方案,我可以为该按钮设置一个onTouchListener,因为该按钮具有“match_parent”属性,因此触摸该viewflipper实际上与触摸该按钮相同。即使我这样做了,它也只是使Button的onClick()事件未触发...
以下是我的简化活动;
无论如何,我正在尝试将OnTouchListener设置为ViewFlipper(父级),并将OnClickListener设置为一个填充父布局的按钮(子级)。我希望ViewFlipper的onTouch()事件首先被调用。我认为如果ViewFlipper的onTouch()返回false,则会触发Button的onClick()。然而,实际上只有Button的onClick()被调用了。为什么?是否有定义好的优先级?
作为替代方案,我可以为该按钮设置一个onTouchListener,因为该按钮具有“match_parent”属性,因此触摸该viewflipper实际上与触摸该按钮相同。即使我这样做了,它也只是使Button的onClick()事件未触发...
以下是我的简化活动;
public class TestActivity extends Activity implements OnTouchListener, View.OnClickListener {
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewFlipper vf = (ViewFlipper) findViewById(R.id.viewFlipper1);
Button btn = (Button) this.findViewById(R.id.btnTest1);
vf.setOnTouchListener(this);
btn.setOnClickListener(this);
}
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ViewFlipper
android:id="@+id/viewFlipper1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<include
android:id="@+id/button"
layout="@layout/test" />
</ViewFlipper>
</LinearLayout>
test.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/testLinear"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="vertical" >
<Button
android:id="@+id/btnTest1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Button" />
</LinearLayout>