动态TabHost在Android 2.2中运行,但不在4.x中运行

时间:2013-09-07 20:40:20

标签: java android android-tabhost

在我的应用程序中,我动态创建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);

有什么不对?

1 个答案:

答案 0 :(得分:0)

我自己解决了这个问题。 刚改变:

final TabHost tabHost = new TabHost(this);

为:

final TabHost tabHost = new TabHost(ProductionCategories.this, null);

现在一切正常。