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