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을 .
이 라이브러리를 사용하고 있습니다. 이 라이브러리 에는 인 AAR
이 mavenCentral
있으므로 사용중인 경우 쉽게 포함 할 수 있습니다 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의 개선을 기다려야합니다.