2014-02-24 70 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