2014-02-24 104 views
0

我想在我的应用程序中实现选项卡。 Tab运作良好。现在在一个选项卡中实现可扩展列表视图...这意味着活动扩展了Fragment而不是FragmentActivity ...但是我在可变列表视图中遇到了一个问题...我怎样才能克服这个...这是我的代码..Android,想要在选项卡中显示可扩展列表视图

public class ExpandableListView extends BaseExpandableListAdapter { 
     private Context _context; 
     private List<String> _listDataHeader; // header titles 
     // child data in format of header title, child title 
     private HashMap<String, List<String>> _listDataChild; 


     public ExpandableListView(Context context, List<String> listDataHeader, 
       HashMap<String, List<String>> listChildData) { 
      this._context = context; 
      this._listDataHeader = listDataHeader; 
      this._listDataChild = listChildData; 
     } 
    @Override 
    public Object getChild(int groupPosition, int childPosition) { 
     // TODO Auto-generated method stub 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .get(childPosition); 
    } 

    @Override 
    public long getChildId(int groupPosition, int childPosition) { 
     // TODO Auto-generated method stub 
     return childPosition; 
    } 

    @Override 
    public View getChildView(int groupPosition, int childPosition, 
      boolean isLastChild, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     final String childText = (String) getChild(groupPosition, childPosition); 
     if (convertView == null) { 
       LayoutInflater infalInflater = (LayoutInflater) this._context 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       convertView = infalInflater.inflate(R.layout.child_battery, null); 
      } 

      TextView txtListChild = (TextView) convertView 
        .findViewById(R.id.battery); 

      txtListChild.setText(childText); 
      return convertView; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     // TODO Auto-generated method stub 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .size(); 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
     // TODO Auto-generated method stub 
     return this._listDataHeader.get(groupPosition); 
    } 

    @Override 
    public int getGroupCount() { 
     // TODO Auto-generated method stub 
     return this._listDataHeader.size(); 
    } 

    @Override 
    public long getGroupId(int groupPosition) { 
     // TODO Auto-generated method stub 
     return groupPosition; 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parent) { 
     String headerTitle = (String) getGroup(groupPosition); 
     if (convertView == null) { 
      LayoutInflater infalInflater = (LayoutInflater) this._context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = infalInflater.inflate(R.layout.parent, null); 
     } 

     TextView lblListHeader = (TextView) convertView 
       .findViewById(R.id.lblListHeader); 
     lblListHeader.setTypeface(null, Typeface.BOLD); 
     lblListHeader.setText(headerTitle); 

     return convertView; 
    } 

    @Override 
    public boolean hasStableIds() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     // TODO Auto-generated method stub 
     return true; 
    } 


} 

而且主类是...

public class Setting extends Fragment{ 

    ExpandableListView listAdapter; 
    ExpandableListView expListView; 
    List<String> listDataHeader; 
    HashMap<String, List<String>> listDataChild; 

    //private LayoutInflater context; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 

     //// context =inflater; 

      View rootView = inflater.inflate(R.layout.setting, container, false); 


      expListView = (ExpandableListView)rootView. findViewById(R.id.lvExp); 

      // preparing list data 
      prepareListData(); 

      listAdapter = new ExpandableListView(getActivity().getApplicationContext()); 

      // setting list adapter 
      expListView.setAdapter((ListAdapter) listAdapter); 
      return rootView; 

     } 

    private void prepareListData() { 
     listDataHeader = new ArrayList<String>(); 
     listDataChild = new HashMap<String, List<String>>(); 

     // Adding child data 
     listDataHeader.add("Top 250"); 
     listDataHeader.add("Now Showing"); 
     listDataHeader.add("Coming Soon.."); 

     // Adding child data 
     List<String> top250 = new ArrayList<String>(); 
     top250.add("Remaining Battery"); 
     top250.add("Set Alarm Distance"); 
     top250.add("Pick Alarm Tone"); 
     top250.add("Set Vibrate"); 

     List<String> nowShowing = new ArrayList<String>(); 
     nowShowing.add("Remaining Battery"); 
     nowShowing.add("Set Alarm Distance"); 
     nowShowing.add("Pick Alarm Tone"); 
     nowShowing.add("Set Vibrate"); 


     List<String> comingSoon = new ArrayList<String>(); 
     comingSoon.add("2 Guns"); 
     comingSoon.add("The Smurfs 2"); 
     comingSoon.add("The Spectacular Now"); 
     comingSoon.add("The Canyons"); 
     comingSoon.add("Europa Report"); 

     listDataChild.put(listDataHeader.get(0), top250); // Header, Child data 
     listDataChild.put(listDataHeader.get(1), nowShowing); 
     listDataChild.put(listDataHeader.get(2), comingSoon); 
    } 


    } 

错误是构造 “的构造ExpandableListView(上下文,列表,HashMap的>)是未定义” ......

+0

你有错PARAMS。请看@ public constructors http://developer.android.com/reference/android/widget/ExpandableListView.html – Raghunandan

回答

0

这实际上是不与您使用选项卡的事实相关。

您有两个类名为ExpandableListView,并且似乎在您的Settings类中导入了错误的类。

为了规避这一点,我建议你Adapter选择一个不同的名字,所以你不`吨混淆编译器。

或者,您可以将Settings顶部的导入更改为包含您自己的ExpandableListView类,并将实际窗口小部件的外观更改为android.widget.ExpandableListView