我正在尝试创建一个扩展AppCompatActivity的Activity,并在其中有两个片段(一个在另一个之下 - 只是使用LinearLayout)。我想要第一个片段从support-v7库扩展PreferenceFragmentCompat类。无法让PreferenceFragmentCompat工作
我跟着Google关于PreferenceFragmentCompat的简短例子,如https://developer.android.com/reference/android/support/v7/preference/PreferenceFragmentCompat.html所示。
这里是我当前的代码:
GroupDetailsActivity.java
public class GroupDetailsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_group_details);
GroupDetailsPrefFragment prefFragment = GroupDetailsPrefFragment.newInstance();
GroupDetailsMembersFragment membersFragment = GroupDetailsMembersFragment.newInstance();
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
.add(R.id.flPrefFragment, prefFragment, GroupDetailsPrefFragment.TAG)
.add(R.id.flMembersFragment, membersFragment, GroupDetailsMembersFragment.TAG)
.commit();
}
}
GroupDetailsPrefFragment的.java - 有问题的片段
GroupDetailsMembersFragment.java - 复合剂伊利空现在...
public class GroupDetailsMembersFragment extends Fragment {
public static final String TAG = "GroupDetailsMembersFragment";
public static GroupDetailsMembersFragment newInstance() {
GroupDetailsMembersFragment fragment = new GroupDetailsMembersFragment();
return fragment;
}
}
activity_group_details.xml - 活动的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/flPrefFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/flMembersFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
group_details_preferences.xml - 偏好XML文件
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:title="@string/remove_me"
android:key="@string/pref_key_settings_remove_me"/>
<Preference
android:title="@string/delete_group"
android:key="@string/pref_key_settings_delete_group"/>
</PreferenceScreen>
试图编译和运行上面的代码导致我犯了一些错误,第一个是关于偏好主题t帽子没有设置。我已经快速扫描了互联网,发现您需要在活动主题中添加以下行:<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
为此,我需要将support-v14库添加到gradle!
试图再次运行代码,导致我到另一个错误,这是我张贴这个的原因,到目前为止我没有找到任何方法来解决这个问题。这里是崩溃日志:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cochat.android/com.cochat.android.ui.groups.details.GroupDetailsActivity}: java.lang.RuntimeException: Content has view with id attribute 'android.R.id.list_container' that is not a ViewGroup class
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
at android.app.ActivityThread.access$900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: Content has view with id attribute 'android.R.id.list_container' that is not a ViewGroup class
at android.support.v7.preference.PreferenceFragmentCompat.onCreateView(PreferenceFragmentCompat.java:269)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2184)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1298)
at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2136)
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1998)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:181)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1189)
at android.app.Activity.performStart(Activity.java:5441)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
at android.app.ActivityThread.access$900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
一直停留在这个有一段时间了,试图寻找向上的计算器或其他网站,看到了一些解决方案,不同岗位,但他们没有某种原因,设法解决我的问题。
编辑:
我gradle这个文件包含以下内容:
compileSdkVersion 25
buildToolsVersion '25.0.2'
...
compile 'com.android.support:preference-v7:25.1.0'
compile 'com.android.support:preference-v14:25.1.0'
更新1月2日'17
我一直在寻找到的PreferenceFragmentCompat
的源代码,看到它正在尝试加载以下布局:R.layout.preference_list_fragment
。 在该类的onCreateView()
方法中,它正在膨胀布局,并试图查找编号android.R.id.list_container
。 问题是布局中没有这样的id。
下面是从PreferenceFragmentCompat
的代码片段:
final View view = themedInflater.inflate(mLayoutResId, container, false);
final View rawListContainer = view.findViewById(AndroidResources.ANDROID_R_LIST_CONTAINER);
if (!(rawListContainer instanceof ViewGroup)) {
throw new RuntimeException("Content has view with id attribute "
+ "'android.R.id.list_container' that is not a ViewGroup class");
}
虽然
private int mLayoutResId = R.layout.preference_list_fragment;
还在寻找一个解决方案,谢谢!
嘿,我想你的解决方案,但事实并非如此工作,并导致相同的“java.lang.RuntimeException:内容的视图ID属性'android.R.id.list_container'不是一个ViewGroup类”,而且,IDE警告我该ID需要API级别24 ,而我的最小值是16 –
现在不能真正想到任何东西,我会建议尝试使用支持库的版本它不时以不同的方式破裂。也许降级到24作为首发,只是一个想法 –
另外,当试用这个解决方案时,我遇到了另一个问题。如果我想多个片段是首选片段 - 那么这两个容器应该使用@ android:id/list_container id这当然是不可能的,并导致重复的id错误。如果您阅读了我的最新更新,它似乎是支持库中的一个错误。仍然试图找到一个工作:) –