0

Flipper を親として、Listview を子として使用しています。ここでの問題は、リストビューでアイテムをめくってクリックすることです。(右から左にドラッグして) 次のページにめくると、誤ってリスト項目をクリックしてしまいます。

フリップのジェスチャを既に作成している場合、リストビューの onClick を無効にするにはどうすればよいですか?

コード:

フリッパーオンタッチ:

public boolean dispatchTouchEvent(MotionEvent touchevent) {
        super.dispatchTouchEvent(touchevent);
        switch (touchevent.getAction()) {
        case MotionEvent.ACTION_DOWN: {
        lastX = touchevent.getX();
        break;
    }
    case MotionEvent.ACTION_UP: {
        float currentX = touchevent.getX();
        if (lastX - 100 > currentX) {
            if (result_pageNum < max_pageNum) {
                result_pageNum++;
                if (vf.getDisplayedChild() == 0) {
                    listView[1].setClickable(false);
                    setListView(1);
                } else {
                    listView[0].setClickable(false);
                    setListView(0);
                }
                vf.setInAnimation(this, R.anim.in_from_right);
                vf.setOutAnimation(this, R.anim.out_to_left);
                vf.showNext();
            }
        } else if (lastX + 100 < currentX) {
            if (result_pageNum > 0) {
                result_pageNum--;
                if (vf.getDisplayedChild() == 1) {
                    listView[0].setClickable(false);
                    setListView(0);
                } else {
                    listView[1].setClickable(false);
                    setListView(1);
                }
                vf.setInAnimation(this, R.anim.in_from_left);
                vf.setOutAnimation(this, R.anim.out_to_right);
                vf.showPrevious();
            }
        }
        break;
    }
    }
    return false;
}

listView onClick:

private void listView_onClick() {
    for (int i = 0; i < listView.length; i++) {
        listView[i].setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // When clicked, show a toast with the TextView text

Toast.maketext(this,"Working!",Toast.LENGTH_LONG).show();

            }
        });
    }

}
4

2 に答える 2

0

dispatchTouchEventメソッドで、(ACTION_UPイベントの下で)フリングジェスチャが検出された場合、毎回falseを返すのではなく、ブール値としてtrueを返すようにしてください。動きの計算でフリングジェスチャが検出されない場合は、falseのみを返します。

于 2013-01-10T09:33:07.373 に答える
0

dispatchTouchEvent(MotionEvent)この目的で実際に使用するべきではありません。

代わりに、とを使用する必要がonInterceptTouchEvent(MotionEvent)ありonTouchEvent(MotionEvent)ます。

これらのメソッド間の関係は、メソッドのJavadocに文書化されていますが、要約として次のようになります。

onInterceptTouchEvent(MotionEvent)ViewGroup子ビューのいずれかからユーザータッチイベントをインターセプトするかどうかを決定します。たとえばViewFlipper、ListViewがイベントを受信するかどうかを決定します。

onTouchEvent(MotionEvent)ViewFlipperタッチイベントに実際に反応できる場所です。

于 2013-01-10T10:09:21.720 に答える