皆さん、私はしばらくこれに取り組んできましたが、まだ 100% 機能する解決策を見つけていません。
問題
それぞれがImageView(サムネイルと呼びましょう)とその下の別のビューで構成され、テキストと小さなアイコン(タイトルと呼びましょう)で構成されています。
私が達成したいのは、ユーザーがクリックした場所に基づいた 2 つの異なるアクションであり、ギャラリーが左右に飛び交う方法を妨げることはありません。
たとえば、サムネイルをクリックすると、アクション A (たとえば、より大きなバージョンをポップアップする) を実行したいのですが、タイトルをクリックすると、アクション B を実行したいと思います。写真の。
私が試したこと
私が見ているように、問題には2つのアプローチがあります。
アプローチ1
ギャラリーを含むメイン ビュー内からギャラリー アイテムに OnItemClickListener をアタッチし、Gallery Adapter 内から OnClickListener をタイトルにアタッチします。
このアプローチは機能しますが、タイトルでつかんでドラッグすると、ギャラリーが飛び散るのを防ぐようです。
onClick は void を返すため、後でギャラリーの onItemClick によって処理される onClick イベントを渡す方法はないようです。
タイトルを使用してフリングできるようにしたいので、少なくとも現在のバージョンでは、このアプローチは機能しません。
アプローチ 2
2 番目のアプローチは、ギャラリーの setOnItemClickListener 内にすべての検出ロジックを含めることです。
クリックされたビューがサムネイルなのかタイトルなのかを判断する方法があれば、すべてが非常に簡単になり、フリングは損なわれません。
しかし、私はまだこれを行う方法を理解できません。
g.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id) {
// TODO: figure out which view has been clicked on, but how?
}
}
ViewHolders パラダイムで無限アダプターを使用するため、これらの値を印刷してみました。
Log.d("IDs", v.getId() + " " + ((ViewHolder) v.getTag()).thumbnail.getId() + " " + getSelectedItemId() + " " + parent.getId() + " " + parent.getItemIdAtPosition(0));
しかし、たとえばサムネイルをクリックすると、それらはすべて異なっていました。
-1 2131230800 -9223372036854775808 2131230865 0
だから、今私は困惑しています。賢明な Android コミュニティ、助けてくれませんか?
ありがとうございました。