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