Не удается найти TextView в PreferenceActivity - PullRequest
2 голосов
/ 18 апреля 2011

В моем 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 - это TextView из push_reg_status макета, а 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 ]

3 голосов
/ 18 апреля 2011

Preference.setLayoutResource() только обновляет внутреннюю ссылку, которая имеет предпочтение для идентификатора макета, но фактически не обновляет макет для повторного отображения. Поэтому TextView, который вы ищете с помощью findViewById(), не раздувается для вашего использования. Единственное место, где Предпочтения раздувают свои макеты, это когда они созданы.

Вам нужно будет либо настроить этот пользовательский макет в начале (до того, как addPreferencesFromResource() все раздувает), либо вместо этого настроить свойства заголовка / сводки существующего предпочтения, чтобы задать строку «Регистрация успешна». Кроме того, если вы используете пользовательский макет предпочтений, убедитесь, что вы следуете правилам, изложенным в Документация SDK .

Надеюсь, что поможет!

0 голосов
/ 18 апреля 2011

Может быть, потому что вы вызываете findViewById вашей Activity вместо вызова того же метода объекта registrationStatus.

...