私は StackOverflow や他の場所で解決策を見つけるのに苦労してきましたが、この特定の問題について話している直接の投稿を見つけることができませんでした。ただし、これが単に私が何かを見落としている、または私が非常に初心者であるという理由である場合は、事前に申し訳ありません.
とにかく、OnTouchListener を ViewFlipper (親) に設定し、setOnClickListener を Button (子) に設定して、親のレイアウトを埋めようとしています。ViewFlipper の onTouch() イベントを最初に呼び出す必要がありました。ViewFlipper の onTouch() が false を返すと、Button の onClick() が発生したと考えられます。ただし、ボタンの onClick() だけが呼び出されました。なんで?定義された優先順位はありますか?
別の方法として、ボタンには「match_parent」属性があるため、onTouchListener をボタンに設定することもできます。したがって、このビューフリッパーに触れることは、このボタンに触れることと事実上同じでした。 ...
以下は私の単純化されたアクティビティです。
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>