Eu parei repentinamente no desenvolvimento do meu aplicativo quando percebi que PreferenceFragments não eram suportados nesta biblioteca. Existe alguma alternativa que um desenvolvedor Android iniciante possa usar para superar esse obstáculo?
Esta é a minha janela principal a partir de agora
<?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>
Para minha TabActivity, estou usando algo que encontrei online. Aqui está um snippet:
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*...
Existe algum para implementar algo que se pareça com um preferênciafragment (ou preferênciaActivity) usando a biblioteca de compatibilidade android-support-v4?
android
android-fragments
CodePrimate
fonte
fonte
PreferenceFragmentCompat
foi adicionado recentemente à biblioteca de suporte.Respostas:
ATUALIZAÇÃO - 11/06/2015
A biblioteca Support-v7 agora inclui
PreferenceFragmentCompat
. Portanto, será uma ideia melhor usá-lo.Adicione o seguinte projeto como um projeto de biblioteca ao seu aplicativo.
https://github.com/kolavar/android-support-v4-preferencefragment
Você pode manter tudo, incluindo sua transação de fragmento, como está. Ao importar a
PreferenceFragment
classe, certifique-se de que o cabeçalho de importação correto seja o usuário.ao invés de
fonte
RingtonePreference
e tambémOnSharedPreferenceChangeListener
não parece que recebo nenhuma alteração!onPrepareOptionMenu
método me mostra uma assinatura estranha (retornavoid
) diferente do padrão que todos nós conhecemos (retornaboolean
) !!! um problema sério.Eu sei que esta é uma pergunta antiga, mas agora você pode usar
PreferenceFragmentCompat
decom.android.support:preference-v7:23.3.0
fonte
PreferenceFragmentCompat
há alguns problemas importantes: veja este e este relatório de bug, por exemplo, e muitos mais aqui . Acabei usando o obsoletoPreferenceActivity
. suspiroAtualização importante: a revisão mais recente do
v7 support library
agora tem um PreferenceFragmentCompat nativo .Estou usando esta biblioteca , que tem um
AAR
inmavenCentral
para que você possa incluí-la facilmente se estiver usandoGradle
.compile 'com.github.machinarius:preferencefragment:0.1.1'
fonte
Você pode usar o meu
PreferenceFragment
.É simples e não tive problemas com isso até agora. Eu acho que você só pode exibir um deles por vez em uma única atividade, o que deve estar OK.
fonte
Biblioteca de suporte de preferências: fragmentos de preferência para API 7 ou 7, independentemente da atividade
Uma implementação simples incluiria um PreferenceFragmentCompat, como:
Você também precisará definir preferênciasTheme em seu tema:
E adicione isso nas dependências: http://developer.android.com/tools/support-library/features.html
fonte
Você pode talvez usar uma atividade real e usar fragmento, mas não acho que seja uma boa escolha. Você deve usar PreferenceActivity simples e aguardar melhorias nas bibliotecas de compatibilidade retro.
fonte
Você pode usar bibliotecas de terceiros, como UnifiedPreferences, para usar uma única API para todas as versões do Android.
fonte
Em vez disso, você pode estender a partir de PreferenceActivity e, se desejar ter uma ActionBar, pode adicioná-la usando uma barra de ferramentas como estando acima do ListView usado para as preferências.
Isso pode ser feito usando um LinearLayout vertical que contém a barra de ferramentas e um ListView com android: id = "@ android: id / list" .
Se desejar, você pode ver minha solução aqui .
fonte
Como Lucius disse, você pode usar PreferenceFragmentCompat :
Você deve incluir sua dependência no gradle:
Dessa forma, você também pode usar FragmentTransaction de android.support.v4.app.FragmentTransaction e PrefernceFragment. No entanto, você pode ter problemas com temas. Se for o caso, você pode resolvê-lo tendo em conta este post:
Solução para fazer a lib funcionar na API 7 ou superior, mantendo o tema material na API 14+
fonte