2

皆さん、私はしばらくこれに取り組んできましたが、まだ 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 コミュニティ、助けてくれませんか?

ありがとうございました。

4

1 に答える 1

1

SwipeView という解決策があります。これは私のオープン ソース プロジェクトです。github で最新のソースをチェックしてください (私の Web サイトのバイナリは少し古く、あなたが話しているようなものに関連する多くのバグが修正されています)。

https://github.com/fry15/uk.co.jasonfry.android.tools

ここにデモ プロジェクトがあります: http://jasonfry.co.uk/?id=28

楽しみ!

于 2011-03-01T17:24:13.060 に答える