別の Stackoverflow の質問を拡張して、リストビュー (FrameLayout にある) の行がいつスワイプされたかを検出できるように、いくつかのジェスチャ検出コードを実装しました。アダプターから個々の行/ビューを取得する方法について、Damian here による質問/回答に従いました。 リストビューの行の位置 (画面上) を取得する方法
onFling に行のビューを取得するコードがあり、xml レイアウトで非表示に設定されている削除ボタンを表示しようとします。ただし、これは起こりません。スワイプでリストビューにボタンを表示するにはどうすればよいですか?
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
try {
if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
int itemId = MyClass.this.lv.pointToPosition(
(int) e1.getX(), (int) e1.getY());
Log.v("item id", String.valueOf(itemId));
View v = MyClass.this.adapter
.getViewOnScreen(itemId);
Button delete = (Button) v.findViewById(R.id.button_delete);
delete.setVisibility(View.VISIBLE);
//MyClass.this.adapter.notifyDataSetChanged();
}
} catch (Exception e) {
// nothing
}
return false;
}
}
私のリスト アダプター コードは、参照されている質問と同じです。
編集: リストビューで getChildAt() を使用して行のビューを取得しようとしましたが、これは画面が 1 つ以下のアイテムの場合に機能しますが、間違ったビュー以上のものがある場合は間違ったビューが返され、間違った削除ボタンが表示されます。
編集2:ここでの質問の回答を使用して、機能させました: