在我的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_txt
是来自push_reg_status
布局的TextView,push_reg_status_txt
始终为空。
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"/>
.....
为什么?
答案 0 :(得分:3)
Preference.setLayoutResource()
仅更新首选项对布局ID的内部引用,它实际上不会更新布局以重新显示。因此,您使用findViewById()
查找的TextView不会因您的使用而膨胀。首选项夸大其布局的唯一位置是创建时。
您需要在开始时设置自定义布局(在addPreferencesFromResource()
膨胀所有内容之前),或者调整现有首选项的标题/摘要属性,而不是设置“注册成功”字符串。此外,如果您使用的是自定义偏好设置,请确保遵循SDK Documentation中规定的规则。
希望有帮助!
答案 1 :(得分:0)
也许是因为你调用了Activity的findViewById而不是调用registrationStatus对象的相同方法。