0

これは、私が問題を抱えている典型的なビュー レイアウトのようには見えません。

私は2つのリストビューを持っています。

それぞれlistViewが持っていますtouchListener
(その目的は、dispatchTouchEvent() を別の listView に呼び出してスクロールを同期することです)。

ListViewonItemClickListenerlistView の行のクリックも処理する必要があります。

ここまではすべて意図したとおりに機能します。

サブビューでクリックイベントを処理するために、行に別の行 clickListenerを追加したいと思います。subview-group of the listView's

この clickListener をアタッチした後、listView のスクロールが常に機能するとは限らないことがわかります。

この子ビューのclickListenerがclick、親(listView)のtouchListenerの前にタッチイベントを検査しているためだと思います(本当にaかどうかを確認します)。

この問題の回避策は 2 つあります。

  1. 子に clickListener の代わりに touchListener を付けて、return falseevent 以外のすべての touch イベント用にしますFINGER_UP。イベントで、最初に onClickListener に持っていたメソッドを実行し
    ますFINGER_UP

  2. 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);
                    }
                });
    
4

1 に答える 1

0

サブビューでクリックイベントを処理するために、別の clickListener を listView の行のサブビューグループに追加したいと思います。

カスタム アダプタを作成し、OnClickListener を に割り当てるだけですgetView()。質問を見ることができます: Android GridView Button Click Handler for example code.

また、しばらく前にAndroidと回答しました。2 つのリストビューを一緒にスクロールして、ListView を同期するために同様のアプローチを使用しましたか? 両方の答えを組み合わせると、私のアプリは思いどおりに機能します。これが役立つことを願っています。

于 2012-12-28T07:17:40.810 に答える