これは、私が問題を抱えている典型的なビュー レイアウトのようには見えません。
私は2つのリストビューを持っています。
それぞれlistViewが持っていますtouchListener
(その目的は、dispatchTouchEvent() を別の listView に呼び出してスクロールを同期することです)。
ListViewonItemClickListenerlistView の行のクリックも処理する必要があります。
ここまではすべて意図したとおりに機能します。
サブビューでクリックイベントを処理するために、行に別の行 clickListenerを追加したいと思います。subview-group of the listView's
この clickListener をアタッチした後、listView のスクロールが常に機能するとは限らないことがわかります。
この子ビューのclickListenerがclick、親(listView)のtouchListenerの前にタッチイベントを検査しているためだと思います(本当にaかどうかを確認します)。
この問題の回避策は 2 つあります。
子に clickListener の代わりに touchListener を付けて、
return falseevent 以外のすべての touch イベント用にしますFINGER_UP。イベントで、最初に onClickListener に持っていたメソッドを実行し
ますFINGER_UPpublic boolean onInterceptTouchEvent (MotionEvent ev)
このメソッドを実装して、すべてのタッチ スクリーン モーション イベントをインターセプトします。これにより、イベントが子にディスパッチされるときにイベントを監視し、いつでも現在のジェスチャの所有権を取得できます。
(わかりました...混乱しています。タッチイベントは最初に子ビューに行き、子供がタッチを処理しない場合は親に伝播すると思いました..)
..方法1を実装するにはどうすればよいですか?
.. #2も理解し、タッチ配信メカニズムを把握するのを手伝ってください。
編集 - ここで OnClickListener をサブビューに追加します。
viewHolder.layout_author.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent profileIntent = new Intent(ImageListAdapter.this.activity, ProfileActivity.class); profileIntent.putExtra("JsonUser", jsonAlbumImage.jsonUser); ImageListAdapter.this.activity.startActivity(profileIntent); } });