2

私の PreferenceActivity には、いくつかの設定があります。レイアウトから膨らませたもの:

public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   addPreferencesFromResource(R.layout.settings);
   ...
}

protected void onResume() {     
    super.onResume();
    Preference registrationStatus = (Preference) findPreference("registrationStatusPref");
    if (!TextUtils.isEmpty(somestring){
       registrationStatus.setLayoutResource(R.layout.push_reg_status);
       TextView push_reg_status_txt = (TextView)findViewById(R.id.pushRegTxtPref);
    }
    ....
}

push_reg_status_txtpush_reg_statusレイアウトからの TextViewであり、push_reg_status_txt 常に null です。

push_reg_statusレイアウト:

....
<TextView
        android:id="@+id/pushRegTxtPref"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="2dp"
        android:layout_marginBottom="4dp"
        android:text="Registration Succesful"
        android:textColor="#99ff33"
        android:gravity="center_horizontal"
        android:layout_gravity="center_horizontal"/>
.....

なんで?

4

2 に答える 2

3

Preference.setLayoutResource()プリファレンスがレイアウト ID に対して持っている内部参照を更新するだけで、実際にレイアウトを更新して再表示するわけではありません。したがって、探している TextView はfindViewById()、使用できるように拡張されていません。環境設定がレイアウトを拡張する唯一の場所は、作成時です。

そのカスタム レイアウトを最初に設定するか (addPreferencesFromResource()すべてを膨らませる前に)、既存の設定のタイトル/概要プロパティを調整して、「登録成功」文字列を設定する必要があります。また、カスタム設定レイアウトを使用している場合は、SDK ドキュメントに記載されている規則に従っていることを確認してください。

それが役立つことを願っています!

于 2011-04-18T14:43:22.897 に答える
0

おそらく、registrationStatus オブジェクトの同じメソッドを呼び出す代わりに、Activity の findViewById を呼び出すためです。

于 2011-04-18T12:43:25.950 に答える