1. ホーム
  2. android

[解決済み] android-support-v4でPreferenceFragmentの代替となるもの

2023-03-31 03:32:13

質問

PreferenceFragmentsがこのライブラリでサポートされていないことに気づき、アプリの開発が急停止してしまいました。新人のアンドロイド開発者がこの障害を克服するために使用できる代替手段はありますか。

これは、現在のところ私のメイン ウィンドウです。

<?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*...

android-support-v4 互換ライブラリを使って、preferencefragment (または preferenceActivity) のようなものを実装することはできますか?

どのように解決するのですか?

更新 - 2015年6月11日

Support-v7 ライブラリに PreferenceFragmentCompat . だから、それを使うのがより良いアイデアでしょう。


以下のプロジェクトをライブラリプロジェクトとしてアプリケーションに追加してください。

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

フラグメントトランザクションを含め、すべてそのままで大丈夫です。インポートする際に PreferenceFragment クラスをインポートするとき、正しいインポートヘッダがユーザであることを確認してください。

import android.support.v4.preference.PreferenceFragment;

の代わりに

import android.preference.PreferenceFragment;