1

imageView を使用してカスタム設定レイアウトを作成しました。

<Preference 

...
 android:key="pref_custom"

 android:layout="@layout/preference_layout"

 >

onCreate 内の自分の PreferenceActivity で、CustomPreference ImageView を変更したいと考えています。

問題は、以下のコードが常に null を返すことです。

imageViewSmallContact = (ImageView) findViewById(R.id.ImageViewSmallContact);

OnPreferenceClickListener.onPreferenceClickこの ImageView は、メソッド my pref_custom Preference内でのみ見つけることができます。

私のクラスのConfigureActivity(PreferenceActivityを拡張)では、onCreateメソッドで私だけが持っています":

...
super.onCreate(savedInstanceState); 
addPreferencesFromResource(R.xml.preferences); 
updatePreferenceView(); // here I update all my preferences `
...

私の PreferenceActivity onCreate メソッドで、自分の設定を読み取ります
Preference pref= findPreference("pref_phone_");

この 1 つの設定のカスタム レイアウトで画像を変更したいよりも。

imageViewSmallContact = (ImageView) findViewById(R.id.ImageViewSmallContact);

ここで imageViewSmallContact は null を返します。

次に、この設定で OnPreferenceClickListener を登録します

onPreferenceClick 内 findViewById(R.id.ImageViewSmallContact); 正しい値を返します。
私の質問は:

このレイアウトを初期化して PreferenceActivity から imageView を取得するにはどうすればよいですか?

4

1 に答える 1

0

PreferenceActivity の xml 構成を設定するときに、Preferences のレイアウトがすぐに拡張されません。これは、必要になったときにのみ実行されます。にデバッグしようとすることができます

android.preference.Preference.onBindView/onCreateView(..)

これが呼び出されたときに表示されます。実際に表示されたときにのみ行われる ListView でのビューの膨張に似ていると思います。ImageView に対して何をしようとしていますか? おそらく、layout.xml ファイル内で既に指定できますか?

Preference をオーバーライドして、ImageView に必要なことは何でも行う onBindView() のカスタム実装を提供できる場合があります。より洗練されたレイアウトが必要なときに PreferenceActivity 全体を破棄したため、ここでは推測することしかできませんが、xml で参照する Preference のサブクラスを作成できると思います。そのクラス (MyImagePreference など) では、onBindView メソッドをオーバーライドして、必要に応じてビューを初期化します (super.onBindView() 呼び出しの後)。

于 2013-01-16T12:33:05.513 に答える