findViewById null в PreferenceFragment - PullRequest
0 голосов
/ 10 июля 2019

Я использую пользовательский макет в своем фрагменте настроек, как показано ниже:

<Preference
    android:key="customiseNavBtnPreview"
    android:layout="@layout/custom_layout" />

Это нормально отображается на моей странице настроек, но я хочу иметь возможность манипулировать, как при обычной деятельности (например, добавлять события нажатия на кнопки, менять фон на лету и т. Д.).

Обычно я бы просто позвонил findByViewId(R.id.some_child_of_custom_layout), чтобы подобрать виды в макете, но это, похоже, не работает, и я получаю нулевые ссылки на ошибки, как будто представление не существует. Если я взломаю короткую задержку, она как бы подхватывает, но я не хочу задержки.

Вот код создания моей деятельности:

public class BrowserSettingsActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sharedPreferences = new Preferences(this);
        prefsFragment = new PrefsFragment();
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getFragmentManager().beginTransaction().replace(
            android.R.id.content,
            prefsFragment
        ).commit();
    }

Вот фрагмент:

public static class PrefsFragment extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ((BrowserSettingsActivity) getActivity()).prefsFragment = this; // Required for when activity.recreate() is called when applying theme
        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.pref_general);
        BrowserSettingsActivity activity = (BrowserSettingsActivity) getActivity();
        ImageButton test = activity.findViewById(R.id.navButton1Preview);
        // test is null...

Я бы очень признателен за объяснение, ПОЧЕМУ это не работает так же хорошо. Я не очень понимаю, как я должен использовать фрагменты либо .. Я храню свои ссылки на представления там или на классе деятельности? Если я не могу понять это, мне придется переделать всю страницу настроек как обычное занятие, так как все в этом мне кажется нелогичным. Спасибо !!!

...