我正在嘗試創建一個擴展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錯誤。如果您閱讀了我的最新更新,它似乎是支持庫中的一個錯誤。仍然試圖找到一個工作:) –