0

正如标题所说,我有一个ExpandableListView它正在从FragmentExpandableListView在TabHost没有出现在片段

加载TabHost里面我可以得到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 ...

回答

0

你工作的ExpendableListView后,视图已经创建,这不是必要的,你可以做你的工作在onCreateView。也许在displayTab()的适配器上调用notifyDataSetChanged就足够了。

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

如果那不帮助,显示你的适配器代码,请

所以,如果标签已被改变,它卡列斯displayTab明确会发生什么。您是否确保首次初始化时调用该方法?我的意思是证实我运行?像sysout(运行)?

+0

我已经尝试在创建视图之前,在创建视图之后,在创建活动之后,对'ExpandableListView'做的工作......似乎没有任何工作。 此外,我试着调用'notifyDataSetChanged',没有运气:-( – Randy

+0

我验证了方法正在运行,并且正在设置变量。适配器正在获取它所需的信息,并且正在设置为'ExpandableListView '...一切都在发生,因为它应该,但列表视图永远不会显示在片段的初始加载中 – Randy

+0

我向原始问题添加了更多信息 – Randy