应用包含视图的选项卡而不是单独的活动

时间:2012-03-30 19:01:38

标签: java android android-listview

我无法弄清楚如何将当前的标签设置转换为使用视图而不是单独活动的设置...我在调用搜索功能方面存在问题,我认为这是由于我创建的方式我的标签。

我的主要启动器活动是public class Menu extends TabActivity,它会创建标签

 intent = new Intent().setClass(this, TabGroup1.class);
 // Initialize a TabSpec for each tab and add it to the TabHost
 spec = tabHost.newTabSpec("codes").setIndicator("All Codes",res.getDrawable(R.drawable.ic_tab_codes))
 .setContent(intent);
 tabHost.addTab(spec);

`TabGroup1'为每个标签

执行以下操作
public class TabGroup1 extends TabGroupActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    startChildActivity("Category", new Intent(this,Category.class));
}
}

然后调用ListActivity,当单击某个项目时,会显示其中的内容,然后创建另一个意图,然后启动一个新活动,允许我在用户列表中的每个级别上都有选项卡

使用以下代码完成此操作

    public void onListItemClick(ListView parent, View view, int position, long id) {
    Intent intent = new Intent(getParent(), SubCategory.class);
    Cursor cursor = (Cursor) adapter.getItem(position);
    intent.putExtra("CATEGORY", cursor.getString(cursor.getColumnIndex("_id")));
    /*startActivity(intent);*/
    TabGroupActivity parentActivity = (TabGroupActivity)getParent();
    parentActivity.startChildActivity("SubCategory", intent);
}

TabGroupActivity是我从tutorial找到的一个类,它允许您在相同的标签布局下进行多项活动。

我正在努力的是将我所拥有的内容转换为使用视图并使用setContent来更改视图。

我找到了this示例,但它没有为我提供足够的详细信息。 还找到this一个......

有人可以告诉我我需要更改的内容以及如何使用listactivities设置内容......

提前致谢

1 个答案:

答案 0 :(得分:0)

有几件事... setContent定义了内容,它不会导致切换标签。如果您想强制更改某个标签,请使用TabHost.setCurrentTab(tabid);,否则默认为第一个标签,然后是用户选择的标签。

我自己的一个项目的一个例子(这个项目实际上有四个选项卡,但我已经删除了一些尝试并保持这一点)。有几种方法可以做到这一点,但我发现最简单的方法是创建一个方法来填充每个选项卡,这样我就可以根据需要通过为我需要的任何选项卡调用适当的方法来刷新选项卡(下面的所有java都包含在内)在TabActivity中。

<强> setupdetailmain.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:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:padding="5dp" >
            <TextView
                    android:id="@+id/setupheader"
                    android:layout_width="fill_parent"
                    android:layout_height="20dp"
                    android:textSize="15dp" />
            <TabWidget
                    android:id="@android:id/tabs"
                    android:layout_width="fill_parent"
                    android:layout_height="30dp"
                    android:gravity="bottom" />
            <FrameLayout
                    android:id="@android:id/tabcontent"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:padding="5dp" >
            <!-- General Info Tab -->
                    <LinearLayout
                            android:id="@+id/note_tab"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:orientation="vertical" >
                    </LinearLayout>
            <!-- Tool Tab -->
                    <LinearLayout
                            android:id="@+id/offset_tab"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:orientation="vertical" >
                            <ListView
                                    android:id="@+id/list2"
                                    android:layout_width="match_parent"
                                    android:layout_height="0dp"
                                    android:layout_weight="1"
                                    android:drawSelectorOnTop="false" />
                    </LinearLayout>
            </FrameLayout>
    </LinearLayout>
</TabHost>

标签设置代码(扩展TabActivity)

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

    // ***************************************************************
    // Set up the tabs in the tabhost
    // ***************************************************************
    tabHost = getTabHost();
    TabHost.TabSpec spec;
    spec = tabHost.newTabSpec("Offsets").setIndicator("Offsets")
            .setContent(R.id.offset_tab);
    tabHost.addTab(spec);
    spec = tabHost.newTabSpec("Notes").setIndicator("Notes")
            .setContent(R.id.note_tab);
    tabHost.addTab(spec);
    populateTabs(StartTab);
}

标签填充方法

// ***************************************************************
// Fill the Notes tab
// ***************************************************************
private void notestab() {
    notes = (LinearLayout) findViewById(R.id.note_tab);
    notestxt = new TextView(this);
    notestxt.setText(SETUPINFO_NOTES);
    notestxt.setTextSize(15);
    notes.addView(notestxt);
}

// ***************************************************************
// Fill the Offset tab
// ***************************************************************
private void offsettab() {
    wpccount = 0;
    for (int i = 0; i < 20; i++) {
        if (wpcdesc[i] != null) {
            wpcdisplayhold[wpccount] = wpcid[i] + " - " + wpcdesc[i];
            wpcidhold[wpccount] = wpcid[i];
            wpcdeschold[wpccount] = wpcdesc[i];
            wpccount++;
        }
    }
    wpcdisplay = new String[wpccount];
    for (int i = 0; i < wpccount; i++) {
        wpcdisplay[i] = wpcdisplayhold[i];
    }
    mWPCView = (ListView) findViewById(R.id.list2);
    mWPCView.setAdapter(new ColorizingListAdapter(SetupDisplay.this,
            wpcdisplay, "Offset"));
    registerForContextMenu(mWPCView);
}

这使用了自定义适配器,但希望它能够在不进行新活动的情况下了解如何在标签视图中设置列表。