Android のテーブルビューがリストビューとして動作する
質問
テーブルレイアウトを使用してデータを表示していますが、リストアイテムのように動作したい(選択する能力、[背景]を選択するとき、クリックするとき、ホバーエフェクトを持つ、クリックできる)を使用しています。
OnClickListener(to perform action)
OnFocusChangeListener(To change background color)
OnTouchListener(to focus specific row)
現在の問題は、ユーザーがアイテムをタッチすると最初にフォーカスが取得され、次にもう一度タッチしてonclickイベントを起動する必要があることです。これを修正するために変更を加え、ontouchは行に固有のアクションを起動します。
@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
スクリーン。
解決
この解決策があなたのケースに適用できるかどうかはわかりませんが、次のようにできるかもしれません。ユーザーが項目をクリックしたと仮定します (したがって、おそらく 3 つのイベントのシーケンスが OnTouch() メソッドに取得されることになります。ACTION_DOWN、ACTION_MOVE (必ずしも必要ではありません)、および ACTION_UP。これで、それに応じて反応できるようになります。
- ACTION_DOWN の場合、x 座標と y 座標を保存できます。
- ACTION_MOVE の場合は、その x と y を取得し、対応する ACTION_DOWN からの距離を計算します。想定される値よりも長い場合は、スクロールを実行し、項目がスクロールされたことを示すフラグを設定します。
- ACTION_UP の場合はフラグを確認してください。項目がスクロールされなかった場合は、アクションを起動してフラグをクリアします。
おそらく計算は高速である必要があるため、ACTION_MOVE イベントで行うべきことではありませんが、試してみてください。
よろしく!
所属していません StackOverflow