Use of Android expandablelistview

Source: Internet
Author: User
Use of Android expandablelistview

1. mainactivity must inherit expandablelistactivity. The result is that when the sub-item of the single-host listview is to display another 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);}}

Code explanation

1. groupdata is the parent data and childdatalist is the child data.

2. Android. R. layout. simple_expandable_list_item_2 indicates the list implementation method.

3. Data to be displayed in the new string [] {name, is_even} List.

:

That is, when group2 is a single machine, group2 data is displayed.

 

 

Ii. Data source: Use of simplecursortreeadapter

Display the name in the address book, and click "Use name" to display the number. You must also assign the permission to read the address book.

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

The Code is as follows:

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

 

3. Bind data through 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);    }        }

: When you click a subitem, the subitem information is displayed.

 

 

2. Write a class myexpandablelistadapter to the data source, which inherits from 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;          }        }  } 

:

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

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.