0

我有 2 个选项卡:报告和配置文件。

我想在每个选项卡中添加不同的表单(Textview、微调器等)。现在我尝试使用一个按钮,它应该是不同选项卡中的不同按钮。

但我得到的是我在两个选项卡中都有相同的按钮。它应该在报告选项卡中显示按钮名称 ButtonReport 和在配置文件选项卡中显示 ButtonProfile。

下面是它的图片。

在此处输入图像描述

我将按钮代码放在 main.xml 中。

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

        <TabWidget android:id="@android:id/tabs"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        </TabWidget>

        <FrameLayout android:id="@android:id/tabcontent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">



        <!-- Start Interface -->
        <TableLayout android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/tableLayout1" android:alwaysDrawnWithCache="false">  
        <TableRow android:layout_height="fill_parent" android:id="@+id/tableRow3">
            <TableLayout android:id="@+id/tableLayout2" android:layout_width="wrap_content" android:layout_height="wrap_content">

                <Button android:text="Button Report" android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>

            </TableLayout>
            </TableRow>     
        </TableLayout>
        <!-- End Interface -->


        </FrameLayout>



    </LinearLayout>

</TabHost>

这是我的 ReportActivity 类和 ProfileActivity(相同的代码只有不同的名称)

package com.tab;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class ReportActivity extends Activity{
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        TextView text = new TextView(this);
        text.setText("Artist");
        setContentView(text);
    }
}

这是我的 MainActivity 类

package com.tab;

import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TabHost;

public class MainActivity extends TabActivity {
    private TabHost aTab;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Resources res = getResources();
        aTab = getTabHost();
        TabHost.TabSpec spec;
        Intent intent;

        //Report Tab
        intent = new Intent(this, ReportActivity.class);

        spec = aTab.newTabSpec("Report")
            .setIndicator("Report", res.getDrawable(R.drawable.tab_icon))
            .setContent(intent);
        aTab.addTab(spec);

        //Profile Tab
        intent = new Intent(this, ProfileActivity.class);

        spec = aTab.newTabSpec("Profile")
            .setIndicator("Profile", res.getDrawable(R.drawable.tab_icon))
            .setContent(intent);
        aTab.addTab(spec);

        aTab.setCurrentTab(1);
    }
}

有没有办法在不同的选项卡中有不同的形式?

4

4 回答 4

1

最好的方法(我认为)是使用 Fragments:http: //developer.android.com/guide/components/fragments.html

片段至少适用于 API 级别 11,但您可以使用兼容性包: http ://android-developers.blogspot.ch/2011/03/fragments-for-all.html

所以每个标签都会变成一个片段。

于 2012-07-31T05:32:04.137 回答
1

看看 TabHost 教程,看看他们如何在他们TabHost的例子中使用不同的内容 -

主要的.xml

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"/>
    </LinearLayout>
</TabHost>

报告.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <!-- Screen Design for Photos -->
  <Button android:text="Button Report"
            android:textSize="18dip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

</LinearLayout>

配置文件.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <!-- Screen Design for Photos -->
  <Button android:text="Button Profile"
            android:textSize="18dip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

</LinearLayout>

在您的main.xml类中包含一些不同的东西,即Start Interface(Button)这是每个选项卡都显示相同内容的问题。你必须删除它。

而且,在您的ProfileReport活动中,只需使用这将提供您需要的单独按钮来查看此xml文件。setContentView你可以用MainActivity这个,看起来很完美。

希望这对您有所帮助。

于 2012-07-31T05:40:39.497 回答
1

您可以为每个活动(报告和配置文件)设置不同的布局 xml: 来源:http ://www.androidhive.info/2011/08/android-tab-layout-tutorial/ 首先创建一个名为 TabHostActivity 的活动:

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;

public class TabHostActivity extends TabActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TabHost tabHost = getTabHost();

        TabSpec report = tabHost.newTabSpec("Report");
        report.setIndicator("Report", getResources().getDrawable(R.drawable.icon_report));
        Intent reportIntent = new Intent(this, report.class);
        report.setContent(reportIntent);

TabSpec profile = tabHost.newTabSpec("Profile");
        profile.setIndicator("Profile", getResources().getDrawable(R.drawable.icon_profile));
        Intent profileIntent = new Intent(this, profile.class);
        profile.setContent(profileIntent);


        // Adding all TabSpec to TabHost
        tabHost.addTab(report); // Adding photos tab
        tabHost.addTab(profile); // Adding songs tab
    }
}

然后在 res/layouts 下制作 Main.xml:

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"/>
    </LinearLayout>
</TabHost>

然后两个不同的活动将为您的报告和配置文件执行操作:

//report.java
package com.example;

import android.app.Activity;
import android.os.Bundle;

public class ReportActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.report_layout);
    }
}

//profile.java
package com.example;

import android.app.Activity;
import android.os.Bundle;

public class ProfileActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.profile_layout);
    }
}

现在您可以制作两个 XML,一个用于配置文件布局,一个用于报告布局:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <TextView android:text="Profile"
            android:padding="15dip"
            android:textSize="18dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"/>

</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <TextView android:text="Report"
            android:padding="15dip"
            android:textSize="18dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"/>

</LinearLayout>

完成后,您可以修改每个 xml 以拥有您喜欢的任何按钮和微调器等。

最后,确保修改您的 AndroidManifest 以允许活动并通过意图过滤器自动启动到您的 tabhostactivity

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="7" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".TabHostActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".profile" />

        <activity android:name=".report" />


    </application>
于 2012-07-31T05:42:02.387 回答
0

我认为这段代码会对您有所帮助。您可以使用不同的意图来调用不同的选项卡活动..并且您可以为不同的活动设置不同的内容视图..

public class MainActivity extends TabActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    setContentView(R.layout.activity_main);

        Resources ressources = getResources(); 
        TabHost tabHost = getTabHost();

        //Setting Android TAB
        Intent intentAndroid = new Intent().setClass(this, AndroidTab.class);
        TabSpec tabSpecAndroid = tabHost
          .newTabSpec("Android")
          .setIndicator("", ressources.getDrawable(R.drawable.android))
          .setContent(intentAndroid);

        //Setting Apple TAB
        Intent intentApple = new Intent().setClass(this, AppleActivity.class);
        TabSpec tabSpecApple = tabHost
          .newTabSpec("Apple")
          .setIndicator("", ressources.getDrawable(R.drawable.aapl))
          .setContent(intentApple);



        //Add all tabs
        tabHost.addTab(tabSpecAndroid);
        tabHost.addTab(tabSpecApple);


        tabHost.setCurrentTab(0);
}
}

在你应该创建不同的类并为 android 和 apple 创建两个活动之后。在那个特定的活动中,你可以设置不同的 contentviews,我想你会得到你想要的。这只是一个示例,你可以让它成为你想要的一样。 .

于 2012-07-31T05:36:57.987 回答