これは、私が問題を抱えている典型的なビュー レイアウトのようには見えません。
私は2つのリストビューを持っています。
それぞれlistView
が持っていますtouchListener
(その目的は、dispatchTouchEvent() を別の listView に呼び出してスクロールを同期することです)。
ListView
onItemClickListener
listView の行のクリックも処理する必要があります。
ここまではすべて意図したとおりに機能します。
サブビューでクリックイベントを処理するために、行に別の行 clickListener
を追加したいと思います。subview-group of the listView's
この clickListener をアタッチした後、listView のスクロールが常に機能するとは限らないことがわかります。
この子ビューのclickListenerがclick
、親(listView)のtouchListenerの前にタッチイベントを検査しているためだと思います(本当にaかどうかを確認します)。
この問題の回避策は 2 つあります。
子に clickListener の代わりに touchListener を付けて、
return false
event 以外のすべての touch イベント用にしますFINGER_UP
。イベントで、最初に onClickListener に持っていたメソッドを実行し
ますFINGER_UP
public 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); } });