Я внезапно остановил разработку своего приложения, когда понял, что 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 я использую то, что нашел в Интернете. Вот отрывок:
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*...
Есть ли что-нибудь для реализации чего-либо, напоминающего фрагмент предпочтений (или preferenceActivity), с использованием библиотеки совместимости android-support-v4?
android
android-fragments
CodePrimate
источник
источник
PreferenceFragmentCompat
был недавно добавлен в библиотеку поддержки.Ответы:
ОБНОВЛЕНИЕ - 11.06.2015
Библиотека Support-v7 теперь включает
PreferenceFragmentCompat
. Так что будет лучше использовать его.Добавьте в приложение следующий проект как проект библиотеки.
https://github.com/kolavar/android-support-v4-preferencefragment
Вы можете оставить все, включая транзакцию фрагмента, как есть. При импорте
PreferenceFragment
класса убедитесь, что правильный заголовок импорта - пользовательский.import android.support.v4.preference.PreferenceFragment;
вместо того
import android.preference.PreferenceFragment;
источник
RingtonePreference
иOnSharedPreferenceChangeListener
, похоже, не получил никаких изменений!onPrepareOptionMenu
метод показывает мне странную подпись (возвращаетсяvoid
), отличную от стандартной, которую мы все знаем (возвращаетсяboolean
) !!! серьезная проблема.Я знаю, что это старый вопрос, но теперь вы можете использовать
PreferenceFragmentCompat
изcom.android.support:preference-v7:23.3.0
источник
PreferenceFragmentCompat
него есть некоторые серьезные проблемы: см. Этот и этот отчет об ошибке, например, и многие другие здесь .PreferenceActivity
Вместо этого я использовал устаревшее . вздохВажное обновление: последняя редакция из
v7 support library
теперь имеет нативный PreferenceFragmentCompat .Я использую эту библиотеку , в которой есть
AAR
in,mavenCentral
поэтому вы можете легко включить ее, если используетеGradle
.compile 'com.github.machinarius:preferencefragment:0.1.1'
источник
Вы можете использовать мой собственный
PreferenceFragment
.Это просто, и пока у меня не было проблем. Я думаю, вы можете отображать только один из них за раз в одном Activity, что должно быть в порядке.
источник
Библиотека поддержки предпочтений: фрагменты предпочтений для API 7+, независимо от активности
Простая реализация будет включать 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
источник
Возможно, вы можете использовать реальную активность и фрагмент, но я не думаю, что это хороший выбор. Вам следует использовать простую PreferenceActivity и дождаться улучшений в ретро-совместимых библиотеках.
источник
Вы можете использовать сторонние библиотеки, такие как UnifiedPreferences, чтобы использовать единый API для всех версий Android.
источник
Вместо этого вы можете расширить PreferenceActivity , и если вы хотите иметь ActionBar, вы можете добавить его с помощью панели инструментов , расположенной над ListView, используемым для предпочтений.
Это можно сделать с помощью вертикального LinearLayout, который содержит панель инструментов и ListView с android: id = "@ android: id / list" .
Если хотите, можете увидеть мое решение здесь .
источник
Как сказал Люциус, вы можете использовать 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,...) ... }
Таким образом, вы также можете использовать FragmentTransaction для android.support.v4.app.FragmentTransaction и PrefernceFragment. Однако у вас могут быть проблемы с темами. Если это так, вы можете решить эту проблему с учетом этого сообщения:
Решение, чтобы библиотека работала на API 7+, сохраняя тему материалов на API 14+
источник