Android ExpandableListView的使用

來源:互聯網
上載者:User
Android ExpandableListView的使用

一、MainActivity要繼承ExpandableListActivity。效果是當單機ListView的子項是顯示另一個ListView。

public class MainActivity extends ExpandableListActivity {private static final String NAME = "NAME";private static final String IS_EVEN = "IS_EVEN";private ExpandableListAdapter eListAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);List<Map<String,String>> groupData = new ArrayList<Map<String,String>>();List<List<Map<String, String>>> childDataList = new ArrayList<List<Map<String,String>>>();for (int i = 0; i < 10; 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 < 8; 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" );}childDataList.add(children);}eListAdapter = new SimpleExpandableListAdapter(this, groupData, android.R.layout.simple_expandable_list_item_2,new String[] {NAME, IS_EVEN }, new int[] { android.R.id.text1, android.R.id.text2}, childDataList, android.R.layout.simple_expandable_list_item_2, new String[] {NAME, IS_EVEN}, new int[] { android.R.id.text1, android.R.id.text2});setListAdapter(eListAdapter);}}

代碼解釋

1、groupData是父資料 ,childDataList是子資料。

2、android.R.layout.simple_expandable_list_item_2表示list的實現方式

3、new String[] { NAME,IS_EVEN}list需要顯示的資料。             

也就是單機Group2時,顯示Group2的資料。

 

 

二、資料來源:SimpleCursorTreeAdapter的使用

顯示通訊錄中的姓名,單擊用姓名,顯示號碼。前提還要分配讀取通訊錄的許可權

 <uses-permission android:name="android.permission.READ_CONTACTS"/>

 代碼如下:

public class ExpandableList2 extends ExpandableListActivity {      private int mGroupIdColumnIndex;             private String mPhoneNumberProjection[] = new String[] {              People.Phones._ID, People.Phones.NUMBER      };              private ExpandableListAdapter mAdapter;            @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);          }        }  

 

 三、通過BaseExpandableListAdapter綁定資料

1.BaseExpandableListAdapter

public class ExpandableList3 extends Activity {    private String[] groups = { "group1", "group2", "group3", "group4" };      private String[][] children = {              { "g1 item1", "g1 item2", "g1 item3", "g1 item4" },              { "g2 item1", "g2 item2", "g2 item3", "g2 item4" },              { "g3 item1", "g3 item2" },              { "g4 item1", "g4 item2" }      };      //ExpandableListAdapter mAdapter;      private ExpandableListView expandableListView;    private TextView tView = null;     @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);            setContentView(R.layout.activity_main);                tView = (TextView)findViewById(R.id.textView1);        expandableListView = (ExpandableListView)findViewById(R.id.expandableListView1);                ExpandableListAdapter adapter = new BaseExpandableListAdapter() {   @Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {// TODO Auto-generated method stubString string = groups[groupPosition] + children[groupPosition][childPosition];tView.setText(string);return true;}@Overridepublic boolean hasStableIds() {// TODO Auto-generated method stubreturn true;}@Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {// TODO Auto-generated method stubLinearLayout layout = new LinearLayout(ExpandableList3.this);layout.setOrientation(0);layout.setPadding(50, 0, 0, 0);ImageView imageView = new ImageView(ExpandableList3.this);imageView.setImageResource(R.drawable.ic_launcher);layout.addView(imageView);TextView textView = getTextView();textView.setText(getGroup(groupPosition).toString());layout.addView(textView);return layout;}private TextView getTextView() {// TODO Auto-generated method stubAbsListView.LayoutParams lParams = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 64);TextView textView = new TextView(ExpandableList3.this);textView.setLayoutParams(lParams);textView.setPadding(20, 0, 0, 0);textView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);return textView;}@Overridepublic long getGroupId(int groupPosition) {// TODO Auto-generated method stubreturn groupPosition;}@Overridepublic int getGroupCount() {// TODO Auto-generated method stubreturn groups.length;}@Overridepublic Object getGroup(int groupPosition) {// TODO Auto-generated method stubreturn groups[groupPosition];}@Overridepublic int getChildrenCount(int groupPosition) {// TODO Auto-generated method stubreturn children[groupPosition].length;}@Overridepublic View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {// TODO Auto-generated method stubTextView textView  = getTextView();textView.setText(getChild(groupPosition, childPosition).toString());return textView;}@Overridepublic long getChildId(int groupPosition, int childPosition) {// TODO Auto-generated method stubreturn childPosition;}@Overridepublic Object getChild(int groupPosition, int childPosition) {// TODO Auto-generated method stubreturn children[groupPosition][childPosition];}};   expandableListView.setAdapter(adapter);    }        }

 :點擊子項時,顯示子項的資訊。

 

 

2.資料來源寫一個類MyExpandableListAdapter,該類繼承自 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 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;          }        }  } 

 :

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.