[android] android-support-v4를 사용하는 PreferenceFragment의 대안

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클래스를 가져올 때 올바른 가져 오기 헤더가 user인지 확인하십시오.

import android.support.v4.preference.PreferenceFragment;

대신에

import android.preference.PreferenceFragment;


답변

나는 이것이 오래된 질문이라는 것을 알고 있지만 이제 다음에서 사용할 수 PreferenceFragmentCompat있습니다.com.android.support:preference-v7:23.3.0


답변

중요 업데이트 : 최신 버전v7 support library지금은 기본이 PreferenceFragmentCompat을 .

이 라이브러리를 사용하고 있습니다. 이 라이브러리 에는 인 AARmavenCentral있으므로 사용중인 경우 쉽게 포함 할 수 있습니다 Gradle.

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


답변

내 자신을 사용할 수 있습니다 PreferenceFragment.

간단하고 지금까지 아무런 문제가 없었습니다. 하나의 활동에서 한 번에 하나만 표시 할 수 있다고 생각합니다.


답변

기본 설정 지원 라이브러리 : 활동에 관계없이 API 7 이상에 대한 기본 설정 조각

간단한 구현에는 다음과 같은 PreferenceFragmentCompat이 포함됩니다.

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

테마에서 preferencesTheme도 설정해야합니다.

<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를 사용하고 retro compat libs의 개선을 기다려야합니다.


답변

UnifiedPreferences 와 같은 타사 라이브러리 를 사용하여 모든 Android 버전에 단일 API를 사용할 수 있습니다 .