Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1043581
  • 博文数量: 244
  • 博客积分: 6820
  • 博客等级: 准将
  • 技术积分: 3020
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-09 21:33
文章分类

全部博文(244)

文章存档

2013年(1)

2012年(16)

2011年(132)

2010年(3)

2009年(12)

2008年(80)

我的朋友

分类: LINUX

2011-07-13 10:25:10

ExpandableListActivity:

   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绑定数据:

view plain
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> groupData = new ArrayList>(); 
        List>> childData = new ArrayList>>(); 
        for (int i = 0; i < 20; i++) { 
            Map curGroupMap = new HashMap(); 
            groupData.add(curGroupMap); 
            curGroupMap.put(NAME, "Group " + i); 
            curGroupMap.put(IS_EVEN, (i % 2 == 0) ? "This group is even" : "This group is odd"); 
             
            List> children = new ArrayList>(); 
            for (int j = 0; j < 15; j++) { 
                Map curChildMap = new HashMap(); 
                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中)文件的布局如下:

view plain
 
      android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
  
              android:textSize="16sp" 
         android:textStyle="bold" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content"/> 
  
              android:textSize="16sp" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content"/> 
 
 


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

view plain
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绑定数据:

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

 

阅读(1543) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~