0

我是Android中的新手,我想創建一個可擴展的listview與childs的行動事件。ExpandablelistView製作兒童羣體的父母

我已按照此鏈接上的步驟來完成我的目標。

http://www.learn-android-easily.com/2013/07/android-expandablelistview-example.html

該項目爲我工作得很好。

但是我想對它做一些改變。

我想打一個父母孩子的(不僅是父母和孩子的)的,換句話說父

祖父。例如

如果水果是蘋果,芒果,香蕉和橙子的父母,我想將水果本身包含在稱爲食物的親本中。

要做到這一點我改變MyExpandableAdapter類代碼如下: -

public class MyExpandableAdapter extends BaseExpandableListAdapter 

    { 

    private Activity activity; 
    private ArrayList<Object> childtems,parentofparents; 
    private LayoutInflater inflater; 
    private ArrayList<String> parentItems, child,pair; 

    // constructor 
    public MyExpandableAdapter(ArrayList<String> parents, ArrayList<Object> childern ,ArrayList<Object> parent) 
    { 
     this.parentofparents =parent; 
     this.parentItems = parents; 
     this.childtems = childern; 
    } 

    public void setInflater(LayoutInflater inflater, Activity activity) 
    { 
     this.inflater = inflater; 
     this.activity = activity; 
    } 

    // method getChildView is called automatically for each child view. 
    // Implement this method as per your requirement 
    @Override 
    public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) 
    { 

     child = (ArrayList<String>) childtems.get(groupPosition); 
     pair = (ArrayList<String>) parentofparents.get(groupPosition); 
     TextView textView = null; 

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.child_view, null); 
     } 

     // get the textView reference and set the value 
     textView = (TextView) convertView.findViewById(R.id.textViewChild); 
     textView.setText(child.get(childPosition)); 

     // set the ClickListener to handle the click event on child item 
     convertView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       Toast.makeText(activity, child.get(childPosition), 
         Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     return convertView; 
    } 

    // method getGroupView is called automatically for each parent item 
    // Implement this method as per your requirement 
    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
    { 

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.parent_view, null); 
     } 

     ((CheckedTextView) convertView).setText(pair.get(groupPosition)); 
     ((CheckedTextView) convertView).setChecked(isExpanded); 

     return convertView; 
    } 

    @Override 
    public Object getChild(int groupPosition, int childPosition) 
    { 
     return null; 
    } 

    @Override 
    public long getChildId(int groupPosition, int childPosition) 
    { 
     return 0; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) 
    { 
     return ((ArrayList<String>) childtems.get(groupPosition)).size(); 
    } 

    @Override 
    public Object getGroup(int groupPosition) 
    { 
     return null; 
    } 

    @Override 
    public int getGroupCount() 
    { 
     return parentItems.size(); 
    } 

    @Override 
    public void onGroupCollapsed(int groupPosition) 
    { 
     super.onGroupCollapsed(groupPosition); 
    } 

    @Override 
    public void onGroupExpanded(int groupPosition) 
    { 
     super.onGroupExpanded(groupPosition); 
    } 

    @Override 
    public long getGroupId(int groupPosition) 
    { 
     return 0; 
    } 

    @Override 
    public boolean hasStableIds() 
    { 
     return false; 
    } 

    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) 
    { 
     return false; 
    } 

} 

而且我改變ExpandableListMainActivity類下面的代碼: -

public class ExpandableListMainActivity extends ExpandableListActivity 
{ 
    // Create ArrayList to hold parent Items and Child Items 
    private ArrayList<String> parentItems = new ArrayList<String>(); 
    private ArrayList<Object> childItems = new ArrayList<Object>(); 
    private ArrayList<Object> ParentOfparent = new ArrayList<Object>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 

     super.onCreate(savedInstanceState); 


     // Create Expandable List and set it's properties 
     ExpandableListView expandableList = getExpandableListView(); 
     expandableList.setDividerHeight(2); 
     expandableList.setGroupIndicator(null); 
     expandableList.setClickable(true); 

     // Set the Items of Parent 
     setGroupParents(); 
     // Set The Child Data 
     setChildData(); 

     // Create the Adapter 
     MyExpandableAdapter adapter = new MyExpandableAdapter(parentItems, childItems,ParentOfparent); 

     adapter.setInflater((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE), this); 

     // Set the Adapter to expandableList 
     expandableList.setAdapter(adapter); 
     expandableList.setOnChildClickListener(this); 
    } 

    // method to add parent Items 
    public void setGroupParents() 
    { 
     parentItems.add("Fruits"); 
     parentItems.add("Flowers"); 
     parentItems.add("Animals"); 
     parentItems.add("Birds"); 
     ParentOfparent .add(parentItems); 
    } 

    // method to set child data of each parent 
    public void setChildData() 
    { 

     // Add Child Items for Fruits 
     ArrayList<String> child = new ArrayList<String>(); 
     child.add("Apple"); 
     child.add("Mango"); 
     child.add("Banana"); 
     child.add("Orange"); 

     childItems.add(child); 

     // Add Child Items for Flowers 
     child = new ArrayList<String>(); 
     child.add("Rose"); 
     child.add("Lotus"); 
     child.add("Jasmine"); 
     child.add("Lily"); 

     childItems.add(child); 

     // Add Child Items for Animals 
     child = new ArrayList<String>(); 
     child.add("Lion"); 
     child.add("Tiger"); 
     child.add("Horse"); 
     child.add("Elephant"); 

     childItems.add(child); 

     // Add Child Items for Birds 
     child = new ArrayList<String>(); 
     child.add("Parrot"); 
     child.add("Sparrow"); 
     child.add("Peacock"); 
     child.add("Pigeon"); 

     childItems.add(child); 
    } 



} 

但我上線

錯誤

MyExpandableAdapter adapter = new MyExpandableAdapter(parentItems,childItems,ParentOfparent);

構造函數MyExpandableAdapter(ArrayList,ArrayList)未定義。

有人可以引導我。

+1

看一看[這裏](HTTP: //////////8293538/2345913) – CRUSADER

回答

0

ParentOfParents應該以小寫字母開頭,否則java會認爲它是一種類

這樣:

private ArrayList<Object> ParentOfparent = new ArrayList<Object>(); 

應該

​​
+0

只是剛剛意識到這個問題有多大......希望答案對某人仍然有用:P –

+0

感謝Bart Hofma我會盡力 – JavaFan