繁体   English   中英

动态TabHost可在Android 2.2中使用,但不能在4.x中使用

[英]Dynamic TabHost working in Android 2.2, but not in 4.x

在我的应用程序中,我动态创建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);行上发生了异常tabHost.addTab(tab);

有什么事吗

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

final TabHost tabHost = new TabHost(this);

至:

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

现在一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM