PreferenceFragment

时间:2019-07-10 15:15:26

标签: android android-preferences findviewbyid

我正在我的设置片段中使用自定义布局,如下所示:

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

这可以在我的设置页面上很好地显示,但我希望能够像在正常活动中一样进行操作(例如,向按钮添加点击事件,即时更改背景等)。

通常,我只需要调用findByViewId(R.id.some_child_of_custom_layout)即可在布局中拾取View,但它似乎无法正常工作,并且会出现空引用错误,就像该视图不存在一样。如果我在很短的延迟时间内入侵,它一定会捡起来,但我不希望延迟。

这是我的活动创建代码:

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...

我真的很感谢解释为什么这也不起作用。我也不太了解如何使用片段。我是否将视图引用保留在其中或活动类中?如果我对此一无所知,则必须将我的整个设置页面重做为正常的“活动”,因为关于此的一切似乎对我来说都是违反直觉的。谢谢!!!

0 个答案:

没有答案