12-01 05:25:20.352: E/AndroidRuntime(733): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Film/com.Film.MainPageActivity}: java.lang.RuntimeException: Your content must have a TabHost whose id attribute is 'android.R.id.tabhost'代码先不贴了,感觉没错,直接贴一个demo的
很明显了 就是你自己定义的tabHost控件的id必须用'android.R.id.tabhost'
同时没记错的话自定义的tabWidget的id必须是'android.R.id.tabs'
我的main.xml文件如下<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" > <!-- 第一个tab对应布局 --> <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/tab1"
> <TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="电影院列表" /> <ListView
android:id="@+id/listdata"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</ListView>
</LinearLayout>
<!-- 第二个tab对应布局 -->
<LinearLayout android:id="@+id/widget_layout_green"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical">
<RadioGroup android:id="@+id/widget43"
android:layout_width="166px" android:layout_height="98px"
android:orientation="vertical">
<RadioButton android:id="@+id/widget44"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="RadioButton">
</RadioButton>
<RadioButton android:id="@+id/widget45"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="RadioButton">
</RadioButton>
</RadioGroup>
</LinearLayout>
</FrameLayout>
如何设置ID,请详细教教我,谢谢
这是一个主tabHost的xml:
<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"> <!-- A paddingTop of zero will remove the strip below the tabs.
显示tabhost 里面的内容
-->
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingBottom="45px" >
</FrameLayout> <RelativeLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/maintabrl"
> <TabWidget android:id="@android:id/tabs"
android:tabStripEnabled="false"
android:layout_alignParentBottom="true"
android:layout_width="fill_parent"
android:layout_height="45px" />
</RelativeLayout>
</TabHost> 单独定义一个layout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabMainNav" android:layout_weight="99"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
>
<ImageView android:id="@+id/ivIcon" android:layout_width="30dip"
android:layout_height="30dip" android:scaleType="fitXY"
android:layout_marginTop="5dip" android:layout_marginBottom="1dip" />
<TextView android:id="@+id/tvTitle" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textSize="14dip"
android:textAppearance="@style/TextViewStyleTabMainNav"
android:layout_marginBottom="5dip" />
</LinearLayout>
其作用就是把单独定义的layout(layout一直都指的是第二个布局)钳到tabHost的每个元素中
//取得tabHost
TabHost tabHost = getTabHost();
//为tabHost设置一个元素
tabHost.addTab(tabHost.newTabSpec("my_resumme").setIndicator(
getTabView( R.string.my_resume, R.drawable.tab_main_nav_me))
.setContent(new Intent(this, UpUserActivity.class)));
//每个元素的样式,也就是上面定义的layout
private View getTabView( int tvTitleid, int iconid) {
LayoutInflater inflater = (LayoutInflater) this
.getSystemService(LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.tab_main_nav, null);
ImageView ivIcon = (ImageView) view.findViewById(R.id.ivIcon);
TextView tvTitle = (TextView) view.findViewById(R.id.tvTitle);
ivIcon.setImageResource(iconid);
tvTitle.setText(tvTitleid);
return view;
}