0

如标题中所述,我有一个从 a 加载的ExpandableListView内部TabHostFragment

我可以在ExpandableListView没有的情况下正确显示,TabHost但是一旦我添加了TabHost它就不会显示。

我也得到了它,这样当我更改选项卡时,列表将显示,但在初始加载视图时,ExpandableListView它不存在。

这是代码:

public class Categories extends Fragment {

    SearchView searchView; //Not doing anything yet
    LayoutInflater inflater;

    ExpandableListView expandableListView;

    TabHost tabHost;  

    private ArrayList<String> parentItems = new ArrayList<String>();
    private ArrayList<Object> childTitles = new ArrayList<Object>();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
    {
        LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.categories_tabs, null);
        searchView = (SearchView) layout.findViewById(R.id.searchView);
        this.inflater = inflater;

        tabHost = (TabHost) layout.findViewById(R.id.tabhost); // The activity TabHost
        tabHost.setup();

        TabHost.TabSpec spec; // Reusable TabSpec for each intent;

        try
        {
            //setup tab name, display text, and layout
            spec = tabHost.newTabSpec(getResources().getString(R.string.events))
                .setIndicator(" " + getResources().getString(R.string.events) + " ")
                .setContent(R.id.categoriesLayout); //must be id, not layout or xml

            //add tab
            tabHost.addTab(spec);

            spec = tabHost.newTabSpec(getResources().getString(R.string.venues))
                .setIndicator(" " + getResources().getString(R.string.venues) + " ")
                .setContent(R.id.categoriesLayout); //must be id, not layout or xml


            tabHost.addTab(spec);

            //finish adding tabs
            tabHost.getTabWidget();
        }
        catch(Exception e)
        {
            Log.v(getActivity().getResources().getString(R.string.app_name), "Failed to load tab host");
        }

        tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() 
        {
            @Override
            public void onTabChanged(String s) 
            {
                displayTab();
            }
        });

        return layout;
    }

    private void displayTab()
    {
        //set parentItems - not shown
        setGroupParents();

        //set childTitles - not shown
        setChildData();


        MyExpandableAdapter adapter = new MyExpandableAdapter(parentItems, childTitles, childDescriptions);
        adapter.setInflater(inflater, getActivity());
        expandableListView.setAdapter(adapter);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState)
    {
        super.onViewCreated(view, savedInstanceState);

        expandableListView = (ExpandableListView) view.findViewById(R.id.list);

        displayTab();
    }

运行该displayTab功能会显示ExpandableListView切换选项卡时的信息,但我需要它在加载屏幕后立即显示列表。我究竟做错了什么?

附录

好的,所以现在我真的很困惑......如果我把

tabHost.setCurrentTab(1);
tabHost.setCurrentTab(0);

在我onStart()ExpandableListView节目中,但如果我只是把

displayTab();

在那里,它没有显示。所有OnTabChangeListener正在做的就是运行displayTab......

4

1 回答 1

0

您在创建视图后在 ExpendableListView 上工作,这不是必需的,您可以在 onCreateView 中完成您的工作。也许在 displayTab() 中调用适配器上的 notifyDataSetChanged 就足够了。

或者您可以将您的代码移动到正确的回调。

如果这没有帮助,请显示您的适配器代码

因此,如果选项卡发生了变化,它会显式调用 displayTab 会发生什么。您是否确保在第一次初始化时调用该方法?我的意思是验证我运行?像系统输出(运行)?

于 2013-09-21T20:15:17.077 回答