2012-03-22 17 views
45

Próbuję zaprogramować interfejs Androida, który korzysta z rozwijanej listy po stronie i fragmentu po drugiej stronie, dzięki czemu mogę załadować różne zasoby, klikając dzieci listy rozwijanej. Ale niestety nie mogę znaleźć żadnych dobrych tutoriali na temat tej listy w dowolnym miejscu. Tak, zaglądałem w dema API i stworzyłem normalną listę z BaseExpandableListAdapter, ale mimo to, zrozumienie tych list dobrze jest trochę trudne bez dobrego samouczka, czy masz jakieś dobre wokół lub informacje, które mogę sprawdzić?Android ExpandableListView - Szukasz samouczka

+0

Nie mogę uwierzyć, że to zostało oznaczone jako „nie konstruktywne”! To było bardzo konstruktywne, a odpowiedzi bardzo pomocne! Dziękuję za opublikowanie tego pytania, DeX03. –

Odpowiedz

50

można znaleźć przykładowe pracy rozszerzalnej widoku listy według poniższych linków:

za kliknięcie na dziecko, można obsłużyć w ten sposób.

getExpandableListView().setOnChildClickListener(new OnChildClickListener() {     
    public boolean onChildClick(ExpandableListView parent, View v, 
       int groupPosition, int childPosition, long id) { 
     // your code... 
    } 
}); 

Mam nadzieję, że to ci pomoże. Dzięki ..

+0

ale to nie działa w taki sam sposób dla działań, które nie rozszerzają ExpandableListActivity, ponieważ to, co mam, jak mam to naprawić? – DeX03

+0

nevermind naprawiłem to, świetna pomoc! – DeX03

58

Stwórz listę pozycji

List<ParentItem> itemList = new ArrayList<ParentItem>(); 

ParentItem parent1 = new ParentItem(); 
parent1.getChildItemList().add(new ChildItem()); 
parent1.getChildItemList().add(new ChildItem()); 
parent1.getChildItemList().add(new ChildItem()); 

ParentItem parent2 = new ParentItem(); 
parent2.getChildItemList().add(new ChildItem()); 
parent2.getChildItemList().add(new ChildItem()); 
parent2.getChildItemList().add(new ChildItem()); 

itemList.add(parent1); 
itemList.add(parent2); 

ExpandableListViewAdapter adapter = new ExpandableListViewAdapter(context, itemList); 

Data Objects

public class ParentItem { 

     private List<ChildItem> childItemList; 

     public ParentItem() { 
       childItemList = new ArrayList<ChildItem>(); 
     } 

     public List<ChildItem> getChildItemList() { 
       return childItemList; 
     } 
} 

public class ChildItem { 
     // filll with your data 
} 

Adapter

public class ExpandableListViewAdapter extends BaseExpandableListAdapter { 

     private static final class ViewHolder { 
       TextView textLabel; 
     } 

     private final List<ParentItem> itemList; 
     private final LayoutInflater inflater; 

     public ExpandableListViewAdapter(Context context, List<ParentItem> itemList) { 
       this.inflater = LayoutInflater.from(context); 
       this.itemList = itemList; 
     } 

     @Override 
     public ChildItem getChild(int groupPosition, int childPosition) { 

       return itemList.get(groupPosition).getChildItemList().get(childPosition); 
     } 

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

     @Override 
     public int getChildrenCount(int groupPosition) { 
       return itemList.get(groupPosition).getChildItemList().size(); 
     } 

     @Override 
     public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, 
           final ViewGroup parent) { 
       View resultView = convertView; 
       ViewHolder holder; 


       if (resultView == null) { 

         resultView = inflater.inflate(android.R.layout.test_list_item, null); //TODO change layout id 
         holder = new ViewHolder(); 
         holder.textLabel = (TextView) resultView.findViewById(android.R.id.title); //TODO change view id 
         resultView.setTag(holder); 
       } else { 
         holder = (ViewHolder) resultView.getTag(); 
       } 

       final ChildItem item = getChild(groupPosition, childPosition); 

       holder.textLabel.setText(item.toString()); 

       return resultView; 
     } 

     @Override 
     public ParentItem getGroup(int groupPosition) { 
       return itemList.get(groupPosition); 
     } 

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

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

     @Override 
     public View getGroupView(int groupPosition, boolean isExpanded, View theConvertView, ViewGroup parent) { 
       View resultView = theConvertView; 
       ViewHolder holder; 

       if (resultView == null) { 
         resultView = inflater.inflate(android.R.layout.test_list_item, null); //TODO change layout id 
         holder = new ViewHolder(); 
         holder.textLabel = (TextView) resultView.findViewById(android.R.id.title); //TODO change view id 
         resultView.setTag(holder); 
       } else { 
         holder = (ViewHolder) resultView.getTag(); 
       } 

       final ParentItem item = getGroup(groupPosition); 

       holder.textLabel.setText(item.toString()); 

       return resultView; 
     } 

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

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

} 

Daje

============================== 
+Parent 1 
============================== 
-child 1.1 
============================== 
-child 1.2 
============================== 
-child 1.3 
============================== 
+Parent 2 
============================== 
-child 2.1 
============================== 
-child 2.2 
============================== 
-child 2.3 
============================== 
+1

, ale jak mogę obsłużyć zdarzenie kliknięcia na listach potomnych? bo to jest główny problem ze wszystkimi tutorialami, które znalazłem – DeX03

+0

'Semi colon (;)' brakuje ' itemList = new ArrayList ()' –

+1

Otrzymuję null 'holder.textLabel.setText (item.toString()); ', Jak to naprawić? –

1

ten sposób można obsługiwać zdarzenia:

getExpandableListView().setOnChildClickListener(new OnChildClickListener() 
{    
    public boolean onChildClick(ExpandableListView parent, 
     View v, int groupPosition, int childPosition, long id) 
    { 
     // your code... 
    } 
} 
+2

nieistotna odpowiedź .... –

Powiązane problemy