我正在升级一个使用 TabHost
显示三个不同选项卡和嵌套活动的 Android 应用程序 (1.6 兼容性)。
当时使用 ActivityGroup
技巧在选项卡中显示嵌套活动,但我对此方法非常不满意,因为处理某些功能真的很麻烦。
我听说了适用于 1.6 的碎片 API 兼容包,而且一个 Fragment
看起来非常适合我想做的事情(在选项卡中显示嵌套视图 / 功能并具有过渡效果等),但我无法使其与 TabHost
结合使用(它是用于与 Action Bar
一起使用的,但在兼容包中不可用)。
你们有没有找到一种方法在应用程序中创建这样的结构?
我这里的错误是:
ERROR/AndroidRuntime(955): Caused by: java.lang.RuntimeException: Unable
启动活动 ComponentInfo{com.XXX} 时发生错误:在片段 MyFragment 中没有找到 id 为 0x1020011 的视图。
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 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="fill_parent" android:layout_height="wrap_content" android:padding="5dp" android:layout_weight="1" /> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0" /> </LinearLayout> </TabHost>
MainActivity.java
public class MainActivity extends TabActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Resources res = getResources(); final TabHost tabs = getTabHost(); TabHost.TabSpec spec; Intent i; i = new Intent(this, MyActivity.class); spec = tabs.newTabSpec("MyActivity").setIndicator("MyActivity",res.getDrawable(R.drawable.tab)).setContent(i); tabs.addTab(spec); } }
MyActivity.class
public class MyActivity extends FragmentActivity { private static String TAG = "MyActivity"; private static FragmentManager fragmentManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); ListeResultatFragment fragment = MyFragment.newInstance(); fragmentTransaction.add(android.R.id.tabcontent, fragment, "MyFragment"); fragmentTransaction.commit(); } }
MyFragment.java
public class MyFragment extends Fragment { public static MyFragment newInstance() { MyFragment instance = new MyFragment(); return instance; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment, container, false); } }
ActionBar
不在兼容包中可用,但您可以使用 https://github.com/JakeWharton/ActionBarSherlock。 - Macarse