0

テーブル レイアウトを使用してデータを表示していますが、リスト アイテムのように動作させたい (選択時、背景の変更時、クリック時、ホバー効果、クリック可能) その目的のために、次のリスナーを使用しています

  • OnClickListener(to perform action)
  • OnFocusChangeListener(To change background color)
  • OnTouchListener(to focus specific row)

問題は、ユーザーが最初にフォーカスを取得する項目に触れてから、もう一度タッチして onclick イベントを発生させる必要がある場合です。

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() != MotionEvent.ACTION_UP){
        v.requestFocus();
        int viewId= v.getId();
        handleEvent(viewId);//Switch cases to perform row specific actions.
    }
    return false;
}

ユーザーが行イベントに触れると完全に動作しますが、ここでもう 1 つの問題が発生しontouchますscroll downスクリーン。

4

1 に答える 1

1

この解決策があなたの場合に適用できるかどうかはわかりませんが、おそらく次のようにすることができます: ユーザーがアイテムをクリックしたと仮定しましょう (したがって、おそらく OnTouch() メソッドに 3 つのイベントのシーケンスを取得します: ACTION_ DOWN、ACTION_ MOVE (必須ではありません) と ACTION_UP. これで、それに応じて反応できます。

  1. ACTION_DOWN の場合、x 座標と y 座標を保存できます。
  2. ACTION_MOVE の場合、その x と y を取り、対応する ACTION_DOWN からの距離を計算します。想定された値よりも長い場合は、スクロールを行い、アイテムがスクロールされたことを示すフラグを設定します。
  3. ACTION_UP の場合は、フラグを確認してください。アイテムがスクロールされなかった場合は、アクションを起動してフラグをクリアします。

おそらく ACTION_MOVE イベントで計算を行うべきではありません。高速である必要があるためですが、試してみてください。
よろしく!

于 2009-12-18T08:29:42.747 に答える