【发布时间】:2013-09-13 21:41:28
【问题描述】:
我想实现一个偏好屏幕。所以我基本上遵循了developer docs 中的示例。 当我开始活动时,我看到标题列表,有一个标题(这部分似乎有效)。但是,一旦我单击此标题,活动就会崩溃并显示以下日志。
我搜索了 SO 和 google,但找不到有关此错误的更多信息。
我尝试将 preference_appearance_screen.xml 缩短为一个 CheckBoxPreference 项。 XML Line 18 上的错误仍然相同。所以我猜这个文件中找不到错误。
我的活动课:
public class TrainerPreferenceActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preference_headers, target);
}
public static class AppearancePrefFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference_appearance_screen);
}
}
}
preference_headers.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<preference-headers
xmlns:android="http://schemas.android.com/apk/res/android">
<header android:fragment=".TrainerPreferenceActivity$AppearancePrefFragment"
android:title="Appearance"
android:summary="An example of some preferences." />
</preference-headers>
preference_appearance_screen.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/pref_app_cat_theme">
</PreferenceCategory>
<PreferenceCategory
android:title="@string/pref_app_cat_background">
<CheckBoxPreference
android:key="@string/pref_app_bg_iscustom_key"
android:title="@string/pref_app_bg_iscustom_title"
android:summary="An example of some preferences."/>
<CheckBoxPreference
android:key="@string/pref_app_bg_hascolor_key"
android:title="@string/pref_app_bg_hascolor_title"
android:summary="An example of some preferences."/>
<CheckBoxPreference
android:key="@string/pref_app_bg_hasimage_key"
android:title="@string/pref_app_bg_hasimage_title"
android:summary="An example of some preferences."/>
</PreferenceCategory>
<PreferenceCategory
android:title="@string/pref_app_cat_behavior">
<CheckBoxPreference
android:key="@string/pref_app_orientationisenabled_key"
android:title="@string/pref_app_orientationisenabled_title"
android:summary="An example of some preferences."/>
<CheckBoxPreference
android:key="@string/pref_app_gestureisenabled_key"
android:title="@string/pref_app_gestureisenabled_title"
android:summary="An example of some preferences."/>
</PreferenceCategory>
</PreferenceScreen>
LogCat:
04-30 17:22:01.215:E/AndroidRuntime(16775):致命异常:主要 04-30 17:22:01.215: E/AndroidRuntime(16775): java.lang.RuntimeException:二进制 XML 文件第 18 行:您必须提供 一个 layout_width 属性。 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.content.res.TypedArray.getLayoutDimension(TypedArray.java:491) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:5318) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.view.ViewGroup$LayoutParams.(ViewGroup.java:5271) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.widget.AbsListView$LayoutParams.(AbsListView.java:5718) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.AbsListView.generateLayoutParams(AbsListView.java:5355) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.AbsListView.generateLayoutParams(AbsListView.java:86) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:477) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.view.LayoutInflater.inflate(LayoutInflater.java:396) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.preference.Preference.onCreateView(Preference.java:474) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.preference.Preference.getView(Preference.java:451) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.preference.PreferenceGroupAdapter.getView(PreferenceGroupAdapter.java:221) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.AbsListView.obtainView(AbsListView.java:2033) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.widget.ListView.onMeasure(ListView.java:1127) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.view.View.measure(View.java:12723) 04-30 17:22:01.215: E/AndroidRuntime(16775):在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.LinearLayout.measureVertical(LinearLayout.java:660) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.view.View.measure(View.java:12723) 04-30 17:22:01.215: E/AndroidRuntime(16775):在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.view.View.measure(View.java:12723) 04-30 17:22:01.215: E/AndroidRuntime(16775):在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.LinearLayout.measureVertical(LinearLayout.java:660) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.view.View.measure(View.java:12723) 04-30 17:22:01.215: E/AndroidRuntime(16775):在 android.widget.LinearLayout.measureHorizontal(LinearLayout.java:999) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:555) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.view.View.measure(View.java:12723) 04-30 17:22:01.215: E/AndroidRuntime(16775):在 android.widget.LinearLayout.measureVertical(LinearLayout.java:812) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.view.View.measure(View.java:12723) 04-30 17:22:01.215: E/AndroidRuntime(16775):在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.view.View.measure(View.java:12723) 04-30 17:22:01.215: E/AndroidRuntime(16775):在 android.widget.LinearLayout.measureVertical(LinearLayout.java:812) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.view.View.measure(View.java:12723) 04-30 17:22:01.215: E/AndroidRuntime(16775):在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.view.View.measure(View.java:12723) 04-30 17:22:01.215: E/AndroidRuntime(16775):在 android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1064) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.os.Handler.dispatchMessage(Handler.java:99) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 android.os.Looper.loop(Looper.java:137) 04-30 17:22:01.215: E/AndroidRuntime(16775):在 android.app.ActivityThread.main(ActivityThread.java:4424) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 java.lang.reflect.Method.invokeNative(Native Method) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 java.lang.reflect.Method.invoke(Method.java:511) 04-30 17:22:01.215: E/AndroidRuntime(16775):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 04-30 17:22:01.215:E/AndroidRuntime(16775):在 dalvik.system.NativeStart.main(Native Method)
【问题讨论】:
-
您是否尝试过对您的项目进行“清理”——以防万一?此外,请尝试对
android:fragment引用使用完全限定的包名称。一眼看去,我没有发现任何明显的错误。 -
完全限定名称:我已经尝试过了。如果名称拼写错误(我也尝试过),我会抛出一个找不到类的错误。在您发表评论后,我清理了项目:没有变化。
-
好的,我设置了一个快速测试项目,但我无法重现该错误 - 它在我的 Galaxy Nexus 上显示并正常工作。你在什么设备上运行它,你有没有尝试过其他/模拟器?我能找到的唯一可能相关的问题是this style/theming-related one,它似乎无处不在。您是否进行了任何自定义?如果是这样,请尝试以“vanilla”的形式运行上面的代码,看看是否会有所不同。
-
确实是这样。我已经设置了 listSeperatorTextView 样式的样式。但是我没有想到这可能是这里的问题。非常感谢您的提示。将其发布为答案,我会接受。
-
太棒了,我很高兴那已经解决了。快乐的编码 - 我复制粘贴了我之前的评论作为下面的答案。 :)
标签: android android-fragments preferenceactivity