http://www.anddev.org/how_to_switch_views_in_an_activity-t10063.html
1: 在androidUI设计中,经常会遇到如下那样的UI
2: 我记得以前用 TabView还是 TabWidget 的时候,遇到一些Bug。。让人很苦闷。
3:下面几种设计方法应该是比较靠谱的:
3.1:
1) Use Tabs. A single activity using TabWidget could cycle you through your views on a single screen. This doesn't use the menu, but rather adds the selection mechanism at the top of the screen.
2) Add/Remove/Inflate your views in code. This is closer to the method you were trying for. Create a base layout in XML (with nothing but a FrameLayout or something else simple in it):
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/contentPane" android:layout_width="fill_parent" android:layout_height="fill_parent" > </FrameLayout>
FrameLayout contentPane; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_view); contentPane = (FrameLayout)findViewById(R.id.contentPane); /*The rest of your onCreate code*/ } public boolean onOptionsItemSelected(MenuItem item) { LayoutInflater li; switch( item.getItemId() ) { case 0: contentPane.removeAllViews(); li = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); contentPane.addView( li.inflate(R.layout.view2, null) ); return true; case 1: contentPane.removeAllViews(); li = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); contentPane.addView( li.inflate(R.layout.view3, null) ); return true; /*ETC. for more menu choices*/ } return false; }
3.2 也是在elong 芝麻开门项目中使用到的方法:
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:gravity="center" > <com.dp.android.widget.TabView android:id="@+id/hotelsearch_bottom_tab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:stretchColumns="*" /> </LinearLayout> <!-- hotel search --> <!-- viewflipper has the function of scroll maybe the true reason is include layout use the scrollview --> <ViewFlipper android:id="@+id/hotelsearch_modules" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="5dp" > <include layout="@layout/hotel_search_general" /> <include layout="@layout/hotel_search_nearby" /> <include layout="@layout/hotel_search_todayhotel" /> </ViewFlipper>
ViewFlipper modules = (ViewFlipper) findViewById(R.id.hotelsearch_modules); TabView tab = (TabView) findViewById(R.id.hotelsearch_bottom_tab); tab.setViewLayouts( R.layout.railway_tab_btn_left, R.layout.railway_tab_btn_middle, R.layout.railway_tab_btn_right); tab.bindView(modules); //we update some data info in listener .. tab.setOnTabFocusChangedListener(this);
finally i think way 3.2 is not so good as method 3.1 (i think it is more confused)