Saya tiba-tiba berhenti dalam pengembangan aplikasi saya karena saya menyadari bahwa PreferenceFragments tidak didukung di perpustakaan ini. Adakah alternatif yang bisa digunakan oleh developer android pemula untuk mengatasi kendala ini?
Ini adalah jendela utama saya saat ini
<?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>
Untuk TabActivity saya, saya menggunakan sesuatu yang saya temukan online. Berikut cuplikannya:
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*...
Apakah ada yang akan mengimplementasikan sesuatu yang menyerupai preferencefragment (atau preferenceActivity) menggunakan pustaka kompatibilitas android-support-v4?
android
android-fragments
CodePrimate
sumber
sumber
PreferenceFragmentCompat
baru-baru ini ditambahkan ke pustaka dukungan.Jawaban:
UPDATE - 6/11/2015
Library support-v7 sekarang menyertakan
PreferenceFragmentCompat
. Jadi akan menjadi ide yang lebih baik untuk menggunakannya.Tambahkan proyek berikut sebagai proyek perpustakaan ke aplikasi Anda.
https://github.com/kolavar/android-support-v4-preferencefragment
Anda dapat menyimpan semuanya termasuk transaksi fragmen Anda apa adanya. Saat mengimpor
PreferenceFragment
kelas, pastikan header impor yang benar adalah pengguna.import android.support.v4.preference.PreferenceFragment;
dari pada
import android.preference.PreferenceFragment;
sumber
RingtonePreference
dan jugaOnSharedPreferenceChangeListener
tidak mendapatkan perubahan apa pun!onPrepareOptionMenu
metode menunjukkan kepada saya tanda tangan aneh (kembalivoid
) berbeda dengan yang default yang kita semua tahu (kembaliboolean
) !!! masalah serius.Saya tahu ini adalah pertanyaan lama, tetapi sekarang Anda dapat menggunakan
PreferenceFragmentCompat
daricom.android.support:preference-v7:23.3.0
sumber
PreferenceFragmentCompat
ada beberapa masalah utama: lihat ini dan laporan bug ini , misalnya, dan banyak lagi di sini . Saya akhirnya menggunakan yang sudah usangPreferenceActivity
sebagai gantinya. menghela napasPerbarui penting: The Revisi terbaru dari
v7 support library
sekarang memiliki native PreferenceFragmentCompat .Saya menggunakan perpustakaan ini , yang memiliki
AAR
inmavenCentral
sehingga Anda dapat dengan mudah memasukkannya jika Anda menggunakanGradle
.compile 'com.github.machinarius:preferencefragment:0.1.1'
sumber
Anda bisa menggunakan saya sendiri
PreferenceFragment
.Ini sederhana dan sejauh ini saya tidak memiliki masalah dengan itu. Saya pikir Anda hanya dapat menampilkan salah satu dari mereka pada satu waktu dalam satu Aktivitas, yang seharusnya OK.
sumber
Preferences Support Library: Fragmen Preferensi untuk API 7+, apa pun Aktivitasnya
Implementasi sederhana akan menyertakan PreferenceFragmentCompat seperti:
public class PreferencesFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.preferences); } }
Anda juga perlu mengatur Preferensi Tema di tema Anda:
<style name="AppTheme" parent="@style/Theme.AppCompat.Light"> <item name="preferenceTheme">@style/PreferenceThemeOverlay</item> </style>
Dan tambahkan ini dalam dependensi: http://developer.android.com/tools/support-library/features.html
com.android.support:preference-v14:23.1.0
sumber
Anda mungkin bisa menggunakan aktivitas nyata dan menggunakan fragmen, tapi menurut saya itu bukan pilihan yang baik. Anda harus menggunakan PreferenceActivity sederhana dan menunggu peningkatan di perpustakaan compat retro.
sumber
Anda dapat menggunakan pustaka pihak ketiga seperti UnifiedPreferences untuk menggunakan API tunggal untuk semua versi Android.
sumber
Anda dapat memperluas dari PreferenceActivity , dan jika Anda ingin memiliki ActionBar, Anda dapat menambahkannya menggunakan Toolbar karena berada di atas ListView yang digunakan untuk preferensi.
Ini dapat dilakukan dengan menggunakan LinearLayout vertikal yang menampung Toolbar dan ListView dengan android: id = "@ android: id / list" .
Jika mau, Anda dapat melihat solusi saya di sini .
sumber
Seperti yang dikatakan Lucius, Anda dapat menggunakan 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); } }
Anda harus memasukkan ketergantungannya dalam gradle:
dependencies { ... compile 'com.android.support:preference-v7:23.1.X' (wherX = 0,1,...) ... }
Dengan cara ini Anda juga bisa menggunakan FragmentTransaction dari android.support.v4.app.FragmentTransaction dan PrefernceFragment. Namun, Anda mungkin mengalami masalah dengan tema. Jika demikian, Anda dapat mengatasinya dengan mempertimbangkan posting ini:
Solusi untuk membuat lib berfungsi pada API 7+ sambil mempertahankan tema material pada API 14+
sumber