PreferenceFragment与android-support-v4的替代品

我突然停止了应用程序的开发,因为我意识到PreferenceFragments在此库中不受支持。 有没有新手android开发人员可以用来克服这个障碍的替代品?

这是我现在的主窗口

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="0"/> <FrameLayout android:id="@+android:id/realtabcontent" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1"/> </LinearLayout> <TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0" /> </TabHost> </LinearLayout> 

对于我的TabActivity,我正在使用我在网上find的东西。 这是一个片段:

 public class TabControlActivity extends FragmentActivity implements TabHost.OnTabChangeListener { public static final int INSERT_ID = Menu.FIRST; public static TabControlActivity thisCtx; private TabHost mTabHost; private HashMap mapTabInfo = new HashMap(); private TabInfo mLastTab = null; private class TabInfo { private String tag; private Class clss; private Bundle args; private Fragment fragment; TabInfo(String tag, Class clazz, Bundle args) { this.tag = tag; this.clss = clazz; this.args = args; } } class TabFactory implements TabContentFactory { private final Context mContext; /** * @param context */ public TabFactory(Context context) { mContext = context; } /** (non-Javadoc) * @see android.widget.TabHost.TabContentFactory#createTabContent(java.lang.String) */ public View createTabContent(String tag) { View v = new View(mContext); v.setMinimumWidth(0); v.setMinimumHeight(0); return v; } } ...*snip*... 

是否有任何使用android-support-v4兼容性库实现类似于preferencefragment(或preferenceActivity)的东西?

更新 – 6/11/2015

Support-v7库现在包含PreferenceFragmentCompat 。 所以使用它会是一个更好的主意。


将以下项目作为库项目添加到您的应用程序中。

https://github.com/kolavar/android-support-v4-preferencefragment

你可以保持包括你的分段事务在内的所有东西。 导入PreferenceFragment类时,请确保正确的导入标题是用户。

 import android.support.v4.preference.PreferenceFragment; 

代替

 import android.preference.PreferenceFragment; 

我知道这是一个老问题,但是现在可以使用com.android.support:preference-v7:23.3.0 PreferenceFragmentCompat

重要更新: v7 support library的最新版本现在具有原生PreferenceFragmentCompat 。

我正在使用这个库 ,在mavenCentral有一个AAR ,所以如果你使用Gradle ,你可以很容易地包含它。

compile 'com.github.machinarius:preferencefragment:0.1.1'

你可以使用我自己的PreferenceFragment

这很简单,迄今为止我没有任何问题。 我认为你只能在单个活动中一次显示其中的一个,这应该是可以的。

首选项支持库:API 7+的首选片段,不pipe活动

一个简单的实现将包括一个PreferenceFragmentCompat,例如:

 public class PreferencesFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.preferences); } } 

您还需要在主题中设置preferenceTheme:

 <style name="AppTheme" parent="@style/Theme.AppCompat.Light"> <item name="preferenceTheme">@style/PreferenceThemeOverlay</item> </style> 

并添加在依赖关系: http : //developer.android.com/tools/support-library/features.html

 com.android.support:preference-v14:23.1.0 

你可能使用真正的活动和使用片段,但我不认为这是一个好的select。 你应该使用简单的PreferenceActivity,并等待改进compat库。

您可以使用第三方库(如UnifiedPreferences)为Android的所有版本使用单个API。

您可以从PreferenceActivity扩展而来,如果您希望拥有一个ActionBar,可以使用工具栏将其添加到用于首选项的ListView上方。

这可以通过使用一个垂直的LinearLayout来完成,该LinearLayout包含工具栏和一个带有android:id =“@ android:id / list”的ListView。

如果你愿意,你可以在这里看到我的解决scheme。

Lucius说你可以使用PreferenceFragmentCompat :

 public class MyPreferenceFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle bundle, String s) { PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false); addPreferencesFromResource(R.xml.preferences); } } 

你必须在gradle中包含它的依赖:

 dependencies { ... compile 'com.android.support:preference-v7:23.1.X' (wherX = 0,1,...) ... } 

这样你也可以使用android.support.v4.app.FragmentTransaction和PrefernceFragment的FragmentTransaction。 但是,你可能有主题的问题。 如果是这样的话,你可以考虑这个post来解决它:

解决scheme使lib在API 7+上工作,同时在API 14+上保留材质主题