私は、ユーザーがギャラリーからイメージを選択できるカスタムプリファレンスを作成しています。これを行うために、私はそのインテントを、中間の半透明アクティビティを開始し、アクティビティをACTION_GET_CONTENT
で開始し、startActivityForResult
で、ユーザが選択したもののURIを維持するものに設定しました。プリファレンス値の変更をリッスンできるカスタムプリファレンス
(実は、私は一定の名前で内部メモリにファイルを保存し、タイムスタンプとの長期持続が、私はそれは私の質問には無関係だと思う。)
今私はImageViewのを更新したいです私は、PreferenceサブクラスのsetWidget
スペースで、新たに選択したイメージを使用しています。カスタムのPreferenceクラスは、独自の設定キーの値に対する変更をどのようにリスニングできますか?
onBindView()
に画像を設定していますが、これは環境設定画面がレイアウトされているときにのみ呼び出されます。私は様々なビルトイン・プリファレンスのソースを見てきましたが、どれもプリファレンスを選択するためのアクティビティーを開いていないのでこの問題はありません。彼らはすべて、好みに戻ることができるダイアログを持っているか、onClick()
で内部的に行動を起こすことができます。
しかし、ACTION_GET_CONTENT
アクティビティを使用せずにギャラリー画像を選択させる方法は考えられません。
パブリックメソッドを追加してから、自分のPreferenceActivityでOnSharedPreferenceChangedListenerを使用して、プリファレンスを手動で呼び出して更新することができます。しかし、私はこのクラスを複数のプロジェクトで使用するためにライブラリに入れたいと思います(そして後でオープンソースライブラリで公開する可能性があります)。そのため、これらの手作業をすべて必要とするのは非常に醜いです。
私はRingtonePreferenceを見落とし。しかし、それは私のクラスに内部的に動作するようにすることはまだできません。 PreferenceManagerの 'getActivity()'/'getFragment()'はパッケージ保護されています。したがって、PreferenceのIntentを設定できますが、Preferenceはそれが所有しているアクティビティを知らないので、 'startActivityForResult()'を呼び出すことはできません。 – Tenfour04
ああ、申し訳ありませんが、それらの方法がパッケージプライベートであることを認識していませんでした。 'onActivityResult'の設定キーを更新し、あなたの好みの変更を聞くことができますか?更新された回答をご覧ください。 – dominicoder
それは動作します!ニース。私は、これが完全にクリーンな解決策であるという1つの障壁がまだあることを認識しています。中間アクティビティは、それを使用するすべてのプロジェクトに登録する必要があります。しかし、少なくともそれは単なるライナーです。 – Tenfour04