Android 如何将preferenceFragment作为卡查看(cardView)

Android 如何将preferenceFragment作为卡查看(cardView),android,android-fragments,android-cardview,preferencefragment,Android,Android Fragments,Android Cardview,Preferencefragment,我有一个ActionBarActivity,它包含水平滚动视图,在每个视图下显示选项卡和片段。 当前,每个选项卡下加载的片段是PreferenceFragment,但我希望它是cardView的一部分,并且该卡包含我的PreferenceFragment。 我知道可以将PreferenceFragment放在Activity视图内的容器中,但是可以将它放在Fragment的容器中吗 为碎片充气的布局可以包装在cardview中 碎片 public View onCreateView(...)

我有一个ActionBarActivity,它包含水平滚动视图,在每个视图下显示选项卡和片段。 当前,每个选项卡下加载的片段是PreferenceFragment,但我希望它是cardView的一部分,并且该卡包含我的PreferenceFragment。
我知道可以将PreferenceFragment放在Activity视图内的容器中,但是可以将它放在Fragment的容器中吗

为碎片充气的布局可以包装在cardview中

碎片

  public View onCreateView(...) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.news_card_row, container, false);
    return rootView;
}
xml


我发现最好的方法是将嵌套片段与AppCompat的getChildFragmentManager一起使用

我的代码适用于我用我的卡创建的刷卡视图,我认为它适用于您:

PrefsFragment.java:

public class PrefsFragment extends PreferenceFragment {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.settings);

}
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class PrefsContainerFragment extends Fragment {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Fragment prefsFragment = new PrefsFragment();
    FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
    transaction.add(R.id.child_fragment, prefsFragment).commit();

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    return inflater.inflate(R.layout.fragment_pref, container,false);
}


}
PrefsContainerFragment.java:

public class PrefsFragment extends PreferenceFragment {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.settings);

}
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class PrefsContainerFragment extends Fragment {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Fragment prefsFragment = new PrefsFragment();
    FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
    transaction.add(R.id.child_fragment, prefsFragment).commit();

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    return inflater.inflate(R.layout.fragment_pref, container,false);
}


}
片段优先XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
card_view:cardCornerRadius="4dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
card_view:cardBackgroundColor="@color/cardview_light_background"
android:layout_margin="@dimen/card_padding"
tools:context=".PrefFragment"
android:clickable="false">

<FrameLayout
    android:id="@+id/child_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</android.support.v7.widget.CardView>

onCreate方法中的FragmentTransaction可能有问题,但据我所知,它可以工作,因为您使用addPreferencesFromResourceR.xml.settings;在子片段的onCreate中。但是,如果它不适用于您,请尝试将其放在onCreateView或onActivityCreated中。

解决方案是在卡视图中实现ListView

以下是卡片布局:


请注意包含@android:id/list的ListView,这是preferenceFragment膨胀所需的内容。

如果我从ResourcePreferenceFrag中删除AddPreferences,它将崩溃;我看到卡片精细-错误:内容具有id属性为“android.R.id.list”的视图,它不是ListView类。您可以发布xml吗?当然,哪种布局?虽然错误非常简单,但布局包含的列表不是ListView,这是正确的,preferenceFragment确实包含列表。