我正在开发一个我想使用标签栏的应用程序。为此,我跟着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
请指导我。
答案 0 :(得分: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);
}
现在,在addTab1(...)
我已加载Custom_tab_indicator layout
并绑定数据并将标签添加到 Tabhost ,如{{1} }
在最后一步,我设置mTabHost.addTab(spec);
以选择我的第一个标签
更新:您必须将mTabHost.setCurrentTab(0);
设置为Tab Indicator
photospec.setIndicator("", ressources.getDrawable(R.drawable.icon_windows_config))
TabSpec 用于设置指标,内容,标签,图标在特定选项卡上等。我创建了 TabSpec 对象,该对象将由 newTabSpec 方法或 TabHost 类初始化,该类将标记或标题作为参数。
setIndicator 将指示 TabHost 是否选择了特定标签。 TabSpec
中的文件icon_windows_config
将指示该选项卡未选中。此文件将根据该选项卡选择不设置选项卡的背景。
你可以为你的所有标签。