时间:2011-04-18 12:32:03

标签: android textview preferenceactivity

在我的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"/>
.....

为什么?

2 个答案:

答案 0 :(得分:3)

Preference.setLayoutResource()仅更新首选项对布局ID的内部引用,它实际上不会更新布局以重新显示。因此,您使用findViewById()查找的TextView不会因您的使用而膨胀。首选项夸大其布局的唯一位置是创建时。

您需要在开始时设置自定义布局(在addPreferencesFromResource()膨胀所有内容之前),或者调整现有首选项的标题/摘要属性,而不是设置“注册成功”字符串。此外,如果您使用的是自定义偏好设置,请确保遵循SDK Documentation中规定的规则。

希望有帮助!

答案 1 :(得分:0)

也许是因为你调用了Activity的findViewById而不是调用registrationStatus对象的相同方法。