Android ExpandableListActivity 学习笔记

注:来自http://blog.csdn.net/xiangyong2008/archive/2010/03/06/5351969.aspx

An activity that displays an expandable list of items by binding to a data source implementing the ExpandableListAdapter, and exposes event handlers when the user selects an item.
即,可扩展的list,单击某个item后,又可显示一个子list。它的数据通过绑定到ExpandableListAdapter或者ExpandableListAdapter的子类上。

示例1—通过SimpelExpandableListAdapter绑定数据:

public class ExpandableList3 extends ExpandableListActivity {  
    private static final String NAME = "NAME";  
    private static final String IS_EVEN = "IS_EVEN";        
    private ExpandableListAdapter mAdapter;  
      
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);   
        List<Map<String, String>> groupData = new 
                         ArrayList<Map<String, String>>();  
        List<List<Map<String, String>>> childData = new 
                         ArrayList<List<Map<String, String>>>();  
        for (int i = 0; i < 20; i++) {  
            Map<String, String> curGroupMap = new HashMap<String, String>();  
            groupData.add(curGroupMap);  
            curGroupMap.put(NAME, "Group " + i);  
            curGroupMap.put(IS_EVEN, (i % 2 == 0) ?
                          "This group is even" : "This group is odd");  
              
            List<Map<String, String>> children = new 
                           ArrayList<Map<String, String>>();  
            for (int j = 0; j < 15; j++) {  
                Map<String, String> curChildMap = new HashMap<String, String>();  
                children.add(curChildMap);  
                curChildMap.put(NAME, "Child " + j);  
                curChildMap.put(IS_EVEN, (j % 2 == 0) ? 
                           "This child is even" : "This child is odd");  
            }  
            childData.add(children);  
        }  
          
        // Set up our adapter  
        mAdapter = new SimpleExpandableListAdapter(  
                this,  
                groupData,  // 存储父list的数据  
                android.R.layout.simple_expandable_list_item_2, //父list的现实方式  
                new String[] { NAME,IS_EVEN},             // 父list需要显示的数据  
            new int[] { android.R.id.text1,android.R.id.text2},
                       // 父list的数据绑定到的view  
                childData,                                      //子list的数据  
                android.R.layout.simple_expandable_list_item_2,  
                new String[] { NAME, IS_EVEN },  
                new int[] { android.R.id.text1, android.R.id.text2 }  
                );  
        setListAdapter(mAdapter);  
    }  
  
}
 


注意:android.R.layout.simple_expandable_list_item_1:表示只显示一个TextView的数据,即R.id.text1

          android.R.layout.simple_expandable_list_item_2:表示显示二个TextView的数据,即R.id.text1,R.id,text2

         android.R.layout.simple_expandable_list_item_2.xml(在R.layout中)文件的布局如下:

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
     android:layout_width="fill_parent"  
     android:layout_height="wrap_content"  
     android:orientation="vertical">  
   
     <TextView android:id="@+id/text1"  
         android:textSize="16sp"  
         android:textStyle="bold"  
         android:layout_width="fill_parent"  
         android:layout_height="wrap_content"/>  
   
     <TextView android:id="@+id/text2"  
         android:textSize="16sp"  
         android:layout_width="fill_parent"  
         android:layout_height="wrap_content"/>  
</LinearLayout>
 


示例2—通过SimpleCussorTreeAdapter绑定数据:

public class ExpandableList2 extends ExpandableListActivity {  
    private int mGroupIdColumnIndex;   
      
    private String mPhoneNumberProjection[] = new String[] {  
            People.Phones._ID, People.Phones.NUMBER  
    };  
  
      
    private ExpandableListAdapter mAdapter;  
      
        /*  
         * CursorTreeAdapter's method.  
         * Gets the Cursor for the children at the given group  
         * /  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
  
        // Query for people  
        Cursor groupCursor = managedQuery(People.CONTENT_URI,  
                new String[] {People._ID, People.NAME}, null, null, null);  
  
        // Cache the ID column index  
        mGroupIdColumnIndex = groupCursor.getColumnIndexOrThrow(People._ID);  
  
        // Set up our adapter  
        mAdapter = new MyExpandableListAdapter(groupCursor,  
                this,  
                android.R.layout.simple_expandable_list_item_1,  
                android.R.layout.simple_expandable_list_item_1,  
                new String[] {People.NAME}, // Name for group layouts  
                new int[] {android.R.id.text1},  
                new String[] {People.NUMBER}, // Number for child layouts  
                new int[] {android.R.id.text1});  
        setListAdapter(mAdapter);  
    }  
  
    public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {  
  
        public MyExpandableListAdapter(Cursor cursor, Context context, int                      groupLayout, int childLayout, String[] groupFrom, int[] groupTo, 
String[] childrenFrom,  int[] childrenTo) {  super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childrenFrom,  childrenTo);  
        }  
  
  
        @Override  
        protected Cursor getChildrenCursor(Cursor groupCursor) {  
            // Given the group, we return a cursor for all the children 
               within  that group   
  
            // Return a cursor that points to this contact's phone numbers  
            Uri.Builder builder = People.CONTENT_URI.buildUpon();  
           ContentUris.appendId(builder,groupCursor.getLong(mGroupIdColumnIndex));  
            builder.appendEncodedPath(People.Phones.CONTENT_DIRECTORY);  
            Uri phoneNumbersUri = builder.build();  
  
            // The returned Cursor MUST be managed by us, so we use 
               Activity's helper  
            // functionality to manage it for us.  
            return managedQuery(phoneNumbersUri, mPhoneNumberProjection, null, null, null);  
        }  
  
    }  
}  



示例3—通过BaseExpandableListAdapter绑定数据:
public class ExpandableList1 extends ExpandableListActivity {  
  
    ExpandableListAdapter mAdapter;  
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
  
        // Set up our adapter  
        mAdapter = new MyExpandableListAdapter();  
        setListAdapter(mAdapter);  
        // register context menu, when long click the item, it will show a dialog  
        registerForContextMenu(getExpandableListView());  
    }  
  
    @Override  
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {  
        menu.setHeaderTitle("Sample menu");  
        menu.add(0, 0, 0, R.string.expandable_list_sample_action);  
    }  
      
    @Override  
    public boolean onContextItemSelected(MenuItem item) {  
        ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();  
  
        String title = ((TextView) info.targetView).getText().toString();  
          
        int type = ExpandableListView.getPackedPositionType(info.packedPosition);  
        if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {  
            int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);   
            int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);   
            Toast.makeText(this, title + ": Child " + childPos + " clicked in group " + groupPos,  
                    Toast.LENGTH_SHORT).show();  
            return true;  
        } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {  
            int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);   
            Toast.makeText(this, title + ": Group " + groupPos + " clicked", Toast.LENGTH_SHORT).show();  
            return true;  
        }  
          
        return false;  
    }  
  
    /** 
     * A simple adapter which maintains an ArrayList of photo resource Ids.  
     * Each photo is displayed as an image. This adapter supports clearing the 
     * list of photos and adding a new photo. 
     * 
     */  
    public class MyExpandableListAdapter extends BaseExpandableListAdapter {  
        // Sample data set.  children[i] contains the children (String[]) for groups[i].  
        private String[] groups = { "People Names", "Dog Names", "Cat Names", "Fish Names" };  
        private String[][] children = {  
                { "Arnold", "Barry", "Chuck", "David" },  
                { "Ace", "Bandit", "Cha-Cha", "Deuce" },  
                { "Fluffy", "Snuggles" },  
                { "Goldy", "Bubbles" }  
        };  
          
        public Object getChild(int groupPosition, int childPosition) {  
            return children[groupPosition][childPosition];  
        }  
  
        public long getChildId(int groupPosition, int childPosition) {  
            return childPosition;  
        }  
  
        public int getChildrenCount(int groupPosition) {  
            return children[groupPosition].length;  
        }  
  
        public TextView getGenericView() {  
            // Layout parameters for the ExpandableListView  
            AbsListView.LayoutParams lp = new AbsListView.LayoutParams(  
                    ViewGroup.LayoutParams.FILL_PARENT, 64);  
  
            TextView textView = new TextView(ExpandableList1.this);  
            textView.setLayoutParams(lp);  
            // Center the text vertically  
            textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);  
            // Set the text starting position  
            textView.setPadding(36, 0, 0, 0);  
            return textView;  
        }  
          
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild,  
                View convertView, ViewGroup parent) {  
            TextView textView = getGenericView();  
            textView.setText(getChild(groupPosition, childPosition).toString());  
            return textView;  
        }  
  
        public Object getGroup(int groupPosition) {  
            return groups[groupPosition];  
        }  
  
        public int getGroupCount() {  
            return groups.length;  
        }  
  
        public long getGroupId(int groupPosition) {  
            return groupPosition;  
        }  
  
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
            TextView textView = getGenericView();  
            textView.setText(getGroup(groupPosition).toString());  
            return textView;  
        }  
  
        public boolean isChildSelectable(int groupPosition, int childPosition) {  
            return true;  
        }  
  
        public boolean hasStableIds() {  
            return true;  
        }  
  
    }  
} 

你可能感兴趣的:(android,xml,cache,J#,UP)