请参考英语答案
waspreferencefragmentintentionallyexcludedfromthecompatibilitypackage? 8个
尝试使用Android兼容包v4将APP应用程序的TabActivity替换为基于片段的设计。
我面临的问题是,我的TabActivity选项卡之一是PreferencesActivity,因为很明显的原因,我是不可包容的小熊猫/p,所以以上提到的首选项框架都包含在安卓兼容包中
对任何提案都开放。
编辑:试图从我的片段活动中打开首选项活动时得到的异常情况在这里:
故障排除: main
Java.lang.illegalstateexception 3360 didyouforgettocall ' public void setup (localactivitymanageractivitygroupwzdyj/pat andrd
at Android.widget.tab host.setcurrenttab (tab host.Java :326 ) ) ) ) ) )。
at Android.widget.tab host $2. ontabselectionchanged (tab host.Java :132 ) )。
at Android.widget.tab构件$ tabclicklistener.onclick (tab构件. Java :456 ) ) ) ) ) ) )。
at Android.view.view.perform click (view.Java :2485 ) ) ) )。
at android.view.View$年轻店员. run(view.Java:9080 )。
at Android.OS.handler.handle callback (handler.Java 3360587 ) )。
at Android.OS.handler.dispatch message (handler.Java :92 )。
at Android.OS.looper.loop (looper.Java :130 )。
at Android.app.activity thread.main (activity thread.Java :3683 ) ) ) ) ) ) ) ) ) )。
at Java.lang.reflect.method.invoke native (native method ) )。
at Java.lang.reflect.method.invoke (method.Java 3360507 )。
atcom.Android.internal.OS.zygote init $ methodandargscaller.run (zygote init.Java :839 ) )。
atcom.Android.internal.OS.zygote init.main (zygote init.Java :597 )。
atdalvik.system.native start.main (本机方法) )。
我的碎片活动代码如下。 大部分内容来自“tabs”兼容包v4的示例。
EDIT2:为了清楚起见,我们还添加了示例代码。
import java.util.HashMap;
导入安卓. content.context;
导入安卓. content.intent;
导入安卓. OS.bundle;
导入安卓. OS.environment;
import Android.support.v4.app.fragment;
导入安卓. support.v4.app.fragment activity;
导入安卓. support.v4.app.fragment transaction;
导入安卓. util.log;
import Android.view.layoutinflater;
导入安卓. view.view;
import Android .构件. tab host;
import Android .构件. textview;
publicclassplayertabactivityextendsfragmentactivity {
privatestaticfinalstringtag=playertabactivity.class.getsimplename (;
p>@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.player_main);
m包容的含羞草 = new 包容的含羞草(this,mTabHost,R.id.realtabcontent);
//this is my fragment
m包容的含羞草.addTab(mTabHost.newTabSpec("player").setIndicator(createTabView(this,"Player")),PlayerMainFragment.class,null);
//this is my activity
.setContent(new Intent(this,PlayerSettingsActivity.class)));
if (savedInstanceState != null) {
}
}
//make the tab look pretty
private static View createTabView(Context context,String tag) {
tv.setText(tag);
return view;
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("tab",mTabHost.getCurrentTabTag());
}
/**
public static class 包容的含羞草 implements TabHost.jdddy {
private final FragmentActivity mActivity;
private final TabHost mTabHost;
private final int mContainerId;
private final HashMap mTabs = new HashMap();
static final class TabInfo {
private final String tag;
private final Class> clss;
private final Bundle args;
private Fragment fragment;
tag = _tag;
clss = _class;
args = _args;
}
}
static class qsdhc implements TabHost.有魅力的大神 {
private final Context mContext;
public qsdhc(Context context) {
}
@Override
public View createTabContent(String tag) {
v.setMinimumWidth(0);
v.setMinimumHeight(0);
return v;
}
}
public 包容的含羞草(FragmentActivity activity,TabHost tabHost,int containerId) {
mActivity = activity;
mContainerId = containerId;
}
public void addTab(TabHost.TabSpec tabSpec,Class> clss,Bundle args) {
tabSpec.setContent(new qsdhc(mActivity));
String tag = tabSpec.getTag();
// Check to see if we already have a fragment for this tab,probably
// from a prevIoUsly saved state. If so,deactivate it,because our
// initial state is that a tab isn't shown.
info.fragment = mActivity.getSupportFragmentManager().findFragmentByTag(tag);
if (info.fragment != null && !info.fragment.isDetached()) {
ft.detach(info.fragment);
ft.commit();
}
mTabs.put(tag,info);
}
@Override
public void onTabChanged(String tabId) {
if (mLastTab != newTab) {
if (mLastTab != null) {
if (mLastTab.fragment != null) {
ft.detach(mLastTab.fragment);
}
}
if (newTab != null) {
if (newTab.fragment == null) {
newTab.fragment = Fragment.instantiate(mActivity,newTab.clss.getName(),newTab.args);
ft.add(mContainerId,newTab.fragment,newTab.tag);
} else {
ft.attach(newTab.fragment);
}
}
mLastTab = newTab;
ft.commit();
mActivity.getSupportFragmentManager().executePendingTransactions();
}
}
}
}