0

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

有什么问题?

4

1 回答 1

0

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

final TabHost tabHost = new TabHost(this);

到:

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

现在一切正常。

于 2013-09-08T12:34:42.020 回答