在我的应用程序中,我动态创建TabHost并按数据填充: 布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/productionLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".ProductionCategories" >
</LinearLayout>
活动创建代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_production_categories);
application = (ViledApp) this.getApplication();
LinearLayout relLay = (LinearLayout) findViewById(R.id.productionLayout);
final TabHost tabHost = new TabHost(this);
tabHost.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
relLay.addView(tabHost);
final TabWidget tabWidget = new TabWidget(this);
tabWidget.setId(android.R.id.tabs);
tabHost.addView(tabWidget, new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
final FrameLayout frameLayout = new FrameLayout(this);
frameLayout.setId(android.R.id.tabcontent);
frameLayout.setPadding(0, 65, 0, 0);
tabHost.addView(frameLayout, new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
tabHost.setup();
ViledDB dbHelper = new ViledDB(this);
int categoriesCount = dbHelper.getCategoriesCount();
ArrayList<SimpleRecord> categories = dbHelper.getCategories();
dbHelper.close();
for (int i = 0; i < categoriesCount; i++) {
final int categoryId = categories.get(i).id;
final ArrayList<ViledProduct> productList = dbHelper
.getProducts(categoryId);
final TabSpec tab = tabHost.newTabSpec(String.format("tag_%d", categoryId));
tab.setIndicator(categories.get(i).title);
tab.setContent(new TabHost.TabContentFactory() {
public View createTabContent(String tag) {
final ListView lstGoods = new ListView(ProductionCategories.this);
final ProductListAdapter adapter = new ProductListAdapter(
ProductionCategories.this,
R.layout.product_item_layout, productList);
lstGoods.setAdapter(adapter);
lstGoods.setOnCreateContextMenuListener(ProductionCategories.this);
lstGoods.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView,
View view, int itemIndex, long arg3) {
ViledProduct product = productList.get(itemIndex);
Intent activity = new Intent (ProductionCategories.this, ProductItem.class);
application.setProduct(product);
startActivity(activity);
}
});
return lstGoods;
}
});
tabHost.addTab(tab);
}
}
在Android 2.2(我在真实设备上测试)它没有任何问题,一切正常。但我无法在Android 4上启动此代码,我有以下例外:
09-07 20:35:45.428:E / AndroidRuntime(847):java.lang.RuntimeException: 无法开始活动 ComponentInfo {com.viled.viledapp / com.viled.viledapp.ProductionCategories}: android.content.res.Resources $ NotFoundException:资源ID#0x0
我跟踪了代码,异常发生在第tabHost.addTab(tab);
行
有什么不对?
答案 0 :(得分:0)
final TabHost tabHost = new TabHost(this);
为:
final TabHost tabHost = new TabHost(ProductionCategories.this, null);
现在一切正常。