【问题标题】:Android 2.3.3, layout loading with tabhost and second tabhost not workingAndroid 2.3.3,使用 tabhost 和第二个 tabhost 加载布局不起作用
【发布时间】:2012-06-19 12:07:45
【问题描述】:

下面是我想要的图片。

现在。当我点击一个项目(见图片中的 2)时,会出现不正确的版本(见图片中的 3)。

如何将第二个 tabhost(参见图片中的 3)加载到第一个 tabhost 的框架布局中?

现在的代码(位于 2,见图)(产生不正确的布局)是这样的:

listView.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {

                Intent i = new Intent(StaticResources.FrameContainer.getContext(), AppSecondTabHost.class);
                StaticResources.FrameContainer.getContext().startActivity(i);
            }
        });

静态变量:StaticResources.FrameContainer 设置在主活动中(见图 1),如下所示:

StaticResources.FrameContainer = (View)getTabHost().getTabContentView();

知道如何重写 onitem 点击事件以显示正确的版本吗?如图所示,右下角的版本有 2 个标签主机。

编辑

要特别清楚。我在图片 1 中创建了 tabhost。当我单击其中一个选项卡时,一个活动开始并且该活动显示一个列表(图 2)。当我 THEN 点击这个列表中的一个项目时,这个项目会将它的 id 存储在一个意图中,并在第一个 tabhost 中打开第二个 tabhost(图 3-4)。然后第二个 tabhost(图 3)将读取在 onitemclick 事件中在图 2 中设置的 id。

【问题讨论】:

    标签: java android layout android-tabhost android-sdk-2.3


    【解决方案1】:

    如果您使用的是 tabhost,如果您将所有选项卡添加到 tabhost,它将自动处理所有选项卡单击事件。您不需要使用 onClickListener 手动更改 tabview。

    以下是我的应用程序示例:

        intent = new Intent().setClass(this, deployment.class);
        intent.putExtra("deploy_data", deployRawData);
    
        spec = tabHost.newTabSpec("Deployment").setIndicator("Deployment",
                          res.getDrawable(R.drawable.man))
                      .setContent(intent);
    
        tabHost.addTab(spec);
    

    通过这种方式,您实际上是在添加到 tabhost 之前将活动和 tabview 捆绑在一起。它应该可以帮助您节省大量编码 onClickListener 的工作。

    【讨论】:

    • 我添加了一个编辑语句。这不起作用,因为我还需要在 itemclick 事件中设置 id。
    【解决方案2】:

    TabHost tabHost=getTabHost(); TabHost.TabSpec tabSpec; 资源 res=getResources();

    tabSpec=tabHost.newTabSpec("First"); tabSpec.setIndicator("FirstTabName",res.getDrawable(R.drawable.image)); Intent i1=new Intent(this,NextClass.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); tabSpec.setContent(i1); tabHost.addTab(tabSpec);

    像这样,您将 Intent 定义为选项卡。

    【讨论】:

    • 问题是我在创建标签时已经设置了意图(在顶部)。意图是产生列表的活动。我应该重置意图吗?那样有用吗?如果是这样,我可以用后退按钮导航吗?当人们再次点击顶部标签时会发生什么?
    • 那么问题不在于您的 tabactivity。您的列表活动 xml 是否包含 标记?我创建了一个具有列表视图活动和标签内容的类似应用
    • 是的,里面有一个线性布局和一个列表视图(图2)
    • 将 linearlayout 更改为 relativelayout .....这将解决您的问题....使用 linearlayout 您无法对 UI 进行任何更改。一切都将在一条直线上对齐
    【解决方案3】:
     TabHost tabHost=getTabHost();
        TabHost.TabSpec tabSpec;
        Resources res=getResources();
    
        tabSpec=tabHost.newTabSpec("First");
        tabSpec.setIndicator("FirstTabName",res.getDrawable(R.drawable.image));
        Intent i1=new Intent(this,NextClass.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        tabSpec.setContent(i1);
        tabHost.addTab(tabSpec);
    

    像这样,您将 Intent 定义为选项卡。因此,您的标签将保持不变,底部内容将是您的活动。

    从列表中选择一个项目时,将其指向下一个类,在该类中您只有两个选项卡的布局不同。 .

    【讨论】:

    • 它应该能以某种方式工作,因为我的手机上有一个具有这种结构的应用程序。文本详细信息和照片,它们只是我玩造型的标签。我只想在第一个 tabhost 的框架布局中显示该活动。
    • 如果使用TabHost不能达到你的要求,为什么不添加看起来像标签的按钮,这样会更容易实现
    • 或者也许你可以在标签主机下添加galleryview。即使这样看起来也不错,这些只是建议。
    • 我更新了上面的图片以显示我想要的东西的轮廓。只是为了确保我们在同一页面上。我在右下角之后。
    • 你想让标签保持不变,只有底部的内容必须改变???
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多