为什么我的第一个标签没有显示?

时间:2011-10-08 12:20:04

标签: android tabs

我创建了一个Tab Activity,显示了xml字符串数组中定义的许多选项卡。每个选项卡与我使用不同数据更新的内容具有相同的列表视图。 每次单击选项卡时,我都可以看到我的选项卡和内容更新,但是第一个选项卡(创建活动时)永远不会显示。

我可以在日志中看到onCreate正在执行时调用onTabChanged,但结果不会显示。如果我更改选定的标签并返回第一个标签,我可以看到它。

这是我的代码:

public class MyActivity extends TabActivity {
    protected final void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LOGGER.debug("onCreate.start");

        setContentView(R.layout.mylayout);

        listview = (ListView) findViewById(R.id.listview);
        adapter = new MyAdapter(getApplicationContext(), new ArrayList<Station>());
        listview.setAdapter(adapter);

        final Resources res = getResources();
        final TabHost tabHost = getTabHost();

        tabHost.setOnTabChangedListener(new OnTabChangeListener(
            (MyApplication) getApplicationContext()));

        TabHost.TabSpec spec;

        final String[] tabsString = res.getStringArray(R.array.tabs);
        for (int i = 0; i < tabsString.length; i++) {
            final String[] tab = tabsString[i].split("\\|");
            spec = tabHost.newTabSpec(tab[0]).setIndicator(tab[1]);
            spec.setContent(R.id.tabcontent);

            tabHost.addTab(spec);

            tabHost.getTabWidget().getChildAt(i).getLayoutParams().width = TAB_WIDTH;
        }

        LOGGER.debug("onCreate.end");
    }


    public void onTabChanged(final String tabId) {

        LOGGER.debug("onTabChanged.start");

        refreshTask = new AsyncTask<Void, Void, List<Station>>() {

            @Override
            protected void onPreExecute() {

                /* Show progress bar and hide list view. */
                findViewById(R.id.loading).setVisibility(View.VISIBLE);
                findViewById(R.id.listview).setVisibility(View.GONE);
            };

            @Override
            protected List<Station> doInBackground(final Void... params) {

                return getStations(0, 0, tabId);
            }

            @Override
            protected void onPostExecute(final List<Station> result) {

                if (result != null) {
                    adapter.setStations(result);
                } else {
                    adapter.clear();
                }
                adapter.notifyDataSetChanged();

                /* Hide progress bar and show list view. */
                findViewById(R.id.loading).setVisibility(View.GONE);
                findViewById(R.id.listview).setVisibility(View.VISIBLE);
            }
        };

        refreshTask.execute();

        LOGGER.debug("onTabChanged.end");
    }
}

这是我在LogCat控制台中可以看到的日志:

MyActivity        onCreate.start
MyActivity        onTabChanged.start
MyActivity        onTabChanged.end
MyActivity        onCreate.end
你知道吗? 感谢

2 个答案:

答案 0 :(得分:1)

以下代码行导致问题 adapter = new MyAdapter(getApplicationContext(),new ArrayList()); 你正在传递大小为0的arralist,因此没有数据显示。 但是当你的监听器中的tab更改时,你会传递包含一些数据的arralist,因此当你回来时你可以看到数据。 享受..

答案 1 :(得分:0)

在创建所有标签后,尝试将第一个标签设置为onCreate末尾的活动标签:

tabHost.setCurrentTab(0);