[英]App crashes when i click on preference header on phone
I am working on simple settings activity. 我正在进行简单的设置活动。 I am using preference-headers, PreferenceFragment, multiple preference-screen files and PreferenceActivity.
我正在使用首选项标题,PreferenceFragment,多个首选项屏幕文件和PreferenceActivity。 I want it to look like and work like android system Settings.
我希望它看起来像Android系统设置一样工作。 Everything works fine on tablet.
在平板电脑上一切正常。 Settings activity display two fragments, one with headers and one with preference-screen.
设置活动显示两个片段,一个带有标题,另一个带有首选项屏幕。 When i open app on the phone, it displays just one fragment with headers, which is exactly what i want, but when i click on something, app crashes.
当我在手机上打开应用程序时,它仅显示一个带有标题的片段,这正是我想要的,但是当我单击某些内容时,应用程序崩溃。 I want to make it working exactly like android system settings, which means that when i click on something on phone, it replaces fragment with preference-screen.
我想使其完全像android系统设置一样工作,这意味着当我单击手机上的某个内容时,它将用首选项屏幕替换片段。 Thank you for your help.
谢谢您的帮助。
Here is my code: 这是我的代码:
headers.xml headers.xml
<preference-headers
xmlns:android="http://schemas.android.com/apk/res/android">
<header
android:fragment="settingsApps.com.bendit.ILY.mysetts.PrefsF"
android:title="@string/settings_update"
android:summary="@string/settings_updateSummary" >
</header>
<header
android:fragment="settingsApps.com.bendit.ILY.mysetts.PrefsF"
android:title="@string/settings_display"
android:summary="@string/settings_displaySummary">
</header>
<header
android:fragment="settingsApps.com.bendit.ILY.mysetts.PrefsF"
android:title="@string/settings_notify">
</header>
</preference-headers>
PreferenceActivity(Prefs.java) PreferenceActivity(Prefs.java)
public class Prefs extends PreferenceActivity {
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.headers, target);
}
}
PreferenceFragment(PrefsF.java) PreferenceFragment(PrefsF.java)
public class PrefsF extends PreferenceFragment{
@Override
public void onCreate(Bundle savedInstanceState) {
int preferenceFile_toLoad=-1;
String settings = getArguments().getString("settings");
if (Constants.SETTING_UPDATE.equals(settings)) {
// Load the preferences from an XML resource
preferenceFile_toLoad= R.xml.preference_update;
}else if (Constants.SETTING_DISPLAY.equals(settings)) {
// Load the preferences from an XML resource
preferenceFile_toLoad=R.xml.preference_display;
}else if (Constants.SETTING_NOTIFY.equals(settings)) {
// Load the preferences from an XML resource
preferenceFile_toLoad=R.xml.preference_notify;
}
addPreferencesFromResource(preferenceFile_toLoad);
}
}
You get that error because your Preference Activity is wrong set for the preference headers type, the correct way for the Activity is this: 之所以会收到该错误,是因为您为首选项标头类型设置的“首选项活动”设置错误,正确的活动方式是:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preference_headers, target);
setContentView(R.layout.preference);
}
@Override
protected boolean isValidFragment(String fragmentName) {
return (Prefs1.class.getName().equals(fragmentName)
|| Prefs2.class.getName().equals(fragmentName)
|| Prefs3.class.getName().equals(fragmentName));
}
Here Prefs"number" is the headers of the preferences like your PrefsF. 这里的Prefs“数字”是首选项的标题,例如您的PrefsF。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.