2012-02-12 16 views
0

私は単純なホーム画面ウィジェットを持っています。これはアイテムのリストを表示します。私は古いデバイスをサポートしたいので、ListViewの代わりにListViewを "エミュレートする"一連のTextViewオブジェクトを使用しています。ウィジェット:同じIDを持つビューのクリックを区別する

本当にうまく動作しますが、これらのアイテムにクリックリスナーを割り当てたいと思います。リスナーの中で私はそれらを区別して、アイテムのコンテンツに作用を及ぼしたいと思います。

これを行う方法? setOnClickPendingIntentはビューのIDを取得するので、個々のアイテムに別々のインテントを割り当てることはできません。これらのIDはすべて同じIDを共有するため、タップされたアイテムはハンドラーによって認識されません。私はXMLレイアウトからのみRemoteViewをインスタンス化することができるので、異なるIDのアイテムを追加することはできません(レイアウトIDだけ異なるレイアウトファイルをたくさん作成する必要があります)。

ハニカムはsetOnClickFillInIntentなので、私の問題を受け入れられる方法で処理していますが、私のウィジェットがGingerbreadで動作するようにしたい場合は使用できません。

答えて

1

個々のアイテムに別々のインテントを割り当てることはできません。それらはすべて同じIDを共有するため、どのアイテムがタップされたかはわかりません。

ウィジェットには固有のIDが必要です。

私は唯一のXMLレイアウトからRemoteViewsをインスタンス化することができますので、私は別のIDの

あなたができることを確認して項目を追加することはできません。アプリウィジェットサイズごとに1つのレイアウトファイルがあります(したがって、1つのサイズのみをサポートしている場合は1つのレイアウトファイル期間になる可能性があります)。そのレイアウトファイルでは、ウィジェットに一意のIDを与えます。

+0

現在、ウィジェットのレイアウトファイルは1つの空のコンテナと、行レイアウト用のファイルがあります。ウィジェットの更新中にRemoteViews.addView(ID、RemoteViews)を使用してそのコンテナに行を挿入しています。私があなたから答えたところでは、ウィジェットXML内の異なるIDを持ついくつかの行をハードコードし、addViewを使用しなくてはならないことを提案します(そして、すべての "行"に対してsetupClickIntentsを設定します)? – user1234567

+0

@ user1234567:まあ、 'addView()'ロジックはあまり役に立たない。特定のアプリウィジェットサイズに対しては、多くの行しか持てません。とにかくユニークなウィジェットIDが必要なので、N個の行をメインアプリウィジェットのレイアウトに手動でクローンして一意のIDを渡すだけでよいでしょう。 – CommonsWare

+0

私はXMLを1回更新するだけで、それ以降はビューツリーを変更しないので(これは私がaddView()メソッドを使っていたのと同じように)、少し早くすることもできます。ありがとう! – user1234567

0

可能性があります。私は同じ問題を抱えていましたが、私は一度に1つずつ(レイアウト内の個々の行、同じテンプレートからの各行)を生成していることに気付きました。各行は独自のRemoteViewでしたので、forループの中で、私はそれ自身にインテントを設定しました。私はouterRemoteViewsに新しいinnerRemoteViewsを追加している場合たとえば、私は呼びたい:

innerRemoteViews.setOnClickPendingIntent(R.id.inner_row_template_id, PendingIntent.getActivity(context, 0, intent, 0)); 

この方法では、テントはidはまだその行に固有のinnerRemoteViewsに追加されます。

関連する問題