2012-03-22 28 views
45

私は、拡張可能なリストの子をクリックして別のリソースを読み込むことができるように、側面の拡大可能リストと反対側のフラグメントを使用するAndroidインターフェイスをプログラミングしようとしています。しかし残念ながら私はどこでもこのリストに関する良いチュートリアルを見つけることができません。はい、私はAPIデモを見てきましたが、BaseExpandableListAdapterを使って通常のリストを作成しましたが、これらのリストを理解するのは良いチュートリアルがなければ難しいです。Android ExpandableListView - チュートリアルを探しています

+0

!それは非常に建設的で、答えは非常に有用でした!この質問を投稿してくれてありがとう、DeX03。 –

答えて

50

を与える:

子供をクリックすると、このように処理できます。

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

希望すると、これが役立ちます。 おかげ..

+0

しかし、これはExpandableListActivityを拡張しないアクティビティに対しては同じ働きをしません。なぜなら、それは私が持っているものだからです。 – DeX03

+0

nevermind私はちょうどそれを助け、大きな助け! – DeX03

58

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); 

データオブジェクト項目のリストを作成します

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 
} 

アダプタ

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; 
     } 

} 

は、あなたがリンクをたどって拡張可能なリストビューの作業例を見つけることができますあなたの

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

ですが、どのようにしてリストの子に対してclickイベントを処理できますか?私が見つけたすべてのチュートリアルの主な問題です。 – DeX03

+0

'セミコロン(;)'が見つからない ' itemList = new ArrayList ()' –

+1

null 'holder.textLabel.setText(item.toString() ); '、どのようにそれを修正しましたか? –

1

あなたがイベントを処理することができますこの方法:私は、これは「建設的ではない」としてマークされていた信じることができない

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

無関係な回答.... –

関連する問題