【发布时间】:2017-02-01 08:45:17
【问题描述】:
我对 PreferenceFregment 有疑问。我错过了什么吗?在我只有首选项文件之前工作正常。然后我包括标题。好像我在某个地方错过了什么。
致命异常:主要 进程:com.example.tallycounter.tallycounter,PID:25931 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.tallycounter.tallycounter/com.example.tallycounter.tallycounter.SettingsActivity}:java.lang.RuntimeException:PreferenceActivity 的子类必须覆盖 isValidFragment(String) 以验证片段类是有效的! com.example.tallycounter.tallycounter.SettingsActivity 没有检查片段 com.example.tallycounter.tallycounter.SettingsActivity$SettingsFragment 是否有效。 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 在 android.app.ActivityThread.-wrap12(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 原因:java.lang.RuntimeException:PreferenceActivity 的子类必须重写 isValidFragment(String) 以验证 Fragment 类是否有效! com.example.tallycounter.tallycounter.SettingsActivity 没有检查片段 com.example.tallycounter.tallycounter.SettingsActivity$SettingsFragment 是否有效。 在 android.preference.PreferenceActivity.isValidFragment(PreferenceActivity.java:940) 在 android.preference.PreferenceActivity.switchToHeaderInner(PreferenceActivity.java:1222) 在 android.preference.PreferenceActivity.switchToHeader(PreferenceActivity.java:1249) 在 android.preference.PreferenceActivity.onCreate(PreferenceActivity.java:586) 在 android.app.Activity.performCreate(Activity.java:6662) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 在 android.app.ActivityThread.-wrap12(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 02-01 09:31:49.509 1506-1991/system_process W/ActivityManager:强制完成活动 com.example.tallycounter.tallycounter/.SettingsActivity 02-01 09:31:49.514 1506-1991/system_process W/ActivityManager:强制完成活动 com.example.tallycounter.tallycounter/.SettingsActivity
我的班级:
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import java.util.List;
public class SettingsActivity extends PreferenceActivity {
/*@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
}*/
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.pref_headers, target);
}
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// addPreferencesFromResource(R.xml.preferences);
String settings = getArguments().getString("settings");
if ("pref".equals(settings)) {
addPreferencesFromResource(R.xml.preferences);
}
}
}
}
Xml 首选项标题
<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header
android:fragment="com.example.xxx.xxx.SettingsActivity$SettingsFragment"
android:icon="@mipmap/ic_launcher"
android:title="General">
<extra
android:name="settings"
android:value="pref">
</extra>
</header>
</preference-headers>
【问题讨论】:
-
我尝试添加“@Override protected boolean isValidFragment (String fragmentName) { return SettingsFragment.class.getName().equals(fragmentName); } 但仍然不起作用。我错过了什么?
标签: android