Android:运行时的标签栏

时间:2014-03-03 05:42:00

标签: android android-layout tabs android-tabhost

我正在开发一个我想使用标签栏的应用程序。为此,我跟着This link.代码运行良好。但在该代码中,选项卡是预定义的。

在我的应用程序中,需要是:我想在运行时生成选项卡,这取决于来自SQLite数据库的数据。由于选项卡的数量,选项卡小部件文本和选项卡的数据来自数据库。

编辑:我尝试的代码是:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    DataBaseHelper dataBaseHelper = new DataBaseHelper(this);
      try {
          dataBaseHelper.createDataBase();
      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }
      dataBaseHelper.openDataBase();
      Cursor c = dataBaseHelper.getDataFromDataBase();
      String[] name = new String[c.getCount()];
      int i=0;

      if(c.getCount() > 0){
          if(c.moveToFirst()){
              do{
                  name[i] = c.getString(0);
                  i++;
              } while(c.moveToNext());
          }
      }

    TabHost tabHost = getTabHost();

    for(int j = 0; j < name.length; j++){
        TabSpec tab = tabHost.newTabSpec(name[j]);
        Intent intent = new Intent(this, SecondActivity.class);
        tab.setContent(intent);
        tabHost.addTab(tab);
    }

但我收到的错误是:

03-03 13:49:55.400: I/Process(26507): Sending signal. PID: 26507 SIG: 9
03-03 13:50:02.415: D/dalvikvm(26665): GC_EXTERNAL_ALLOC freed 46K, 53% free 2542K/5379K, external 0K/0K, paused 144ms
03-03 13:50:02.505: D/AndroidRuntime(26665): Shutting down VM
03-03 13:50:02.505: W/dalvikvm(26665): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
03-03 13:50:02.510: E/AndroidRuntime(26665): FATAL EXCEPTION: main
03-03 13:50:02.510: E/AndroidRuntime(26665): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androidtablayout/com.example.androidtablayout.AndroidTabLayoutActivity}: java.lang.IllegalArgumentException: you must specify a way to create the tab indicator.
03-03 13:50:02.510: E/AndroidRuntime(26665):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
03-03 13:50:02.510: E/AndroidRuntime(26665):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
03-03 13:50:02.510: E/AndroidRuntime(26665):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-03 13:50:02.510: E/AndroidRuntime(26665):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
03-03 13:50:02.510: E/AndroidRuntime(26665):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-03 13:50:02.510: E/AndroidRuntime(26665):    at android.os.Looper.loop(Looper.java:123)
03-03 13:50:02.510: E/AndroidRuntime(26665):    at android.app.ActivityThread.main(ActivityThread.java:3691)
03-03 13:50:02.510: E/AndroidRuntime(26665):    at java.lang.reflect.Method.invokeNative(Native Method)
03-03 13:50:02.510: E/AndroidRuntime(26665):    at java.lang.reflect.Method.invoke(Method.java:507)
03-03 13:50:02.510: E/AndroidRuntime(26665):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
03-03 13:50:02.510: E/AndroidRuntime(26665):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
03-03 13:50:02.510: E/AndroidRuntime(26665):    at dalvik.system.NativeStart.main(Native Method)
03-03 13:50:02.510: E/AndroidRuntime(26665): Caused by: java.lang.IllegalArgumentException: you must specify a way to create the tab indicator.
03-03 13:50:02.510: E/AndroidRuntime(26665):    at android.widget.TabHost.addTab(TabHost.java:206)
03-03 13:50:02.510: E/AndroidRuntime(26665):    at com.example.androidtablayout.AndroidTabLayoutActivity.onCreate(AndroidTabLayoutActivity.java:47)
03-03 13:50:02.510: E/AndroidRuntime(26665):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-03 13:50:02.510: E/AndroidRuntime(26665):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
03-03 13:50:02.510: E/AndroidRuntime(26665):    ... 11 more
03-03 13:55:06.845: I/Process(26665): Sending signal. PID: 26665 SIG: 9

请指导我。

1 个答案:

答案 0 :(得分:2)

我过去做过同样的事。请按照以下步骤操作:

  1. 首先从数据库获取所有标签设置数据。

  2. 根据数据库添加标签,在我的要求中,我只想显示4 标签。创建一个像

    这样的循环
    for (int j = 0; j < 4 && j < cursor.getCount(); j++) {
      addTab1(tab_title_from_DB, tab_image_from_DB,tab_fragement_class, 0, 1);
    }
    
  3. 现在,在addTab1(...)我已加载Custom_tab_indicator layout并绑定数据并将标签添加到 Tabhost ,如{{1} }

  4. 在最后一步,我设置mTabHost.addTab(spec);以选择我的第一个标签

  5. 更新:您必须将mTabHost.setCurrentTab(0);设置为Tab Indicator photospec.setIndicator("", ressources.getDrawable(R.drawable.icon_windows_config))

    TabSpec 用于设置指标内容标签图标在特定选项卡上等。我创建了 TabSpec 对象,该对象将由 newTabSpec 方法或 TabHost 类初始化,该类将标记或标题作为参数。

    setIndicator 将指示 TabHost 是否选择了特定标签。 TabSpec中的文件icon_windows_config将指示该选项卡未选中。此文件将根据该选项卡选择不设置选项卡的背景。

    你可以为你的所有标签。