Android Expandablelistview With 6 To 7 Textviews And An Imageview As Child Views
I have gone through many tutorials and implemented expandablelistview with one textview as a child of groupview. Now i need to implement expandablelistview with 6-7 textviews and a
Solution 1:
please follow this code
import java.util.ArrayList;
import android.app.Activity;
import android.app.ExpandableListActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckedTextView;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.parsedemoapp.ParseMainActivity;
import com.rstm.quizappsforiit.R;
publicclassExpandableListMainActivityextendsExpandableListActivity {
// Create ArrayList to hold parent Items and Child ItemsprivateArrayList<String> parentItems = newArrayList<String>();
privateArrayList<Object> childItems = newArrayList<Object>();
privateArrayList<Integer> childimage = newArrayList<Integer>();
ImageView imageView2;
@OverridepublicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Create Expandable List and set it's propertiesExpandableListView expandableList = getExpandableListView();
expandableList.setDividerHeight(2);
expandableList.setGroupIndicator(null);
expandableList.setClickable(true);
// Set the Items of ParentsetGroupParents();
// Set The Child DatasetChildData();
// Create the AdapterMyExpandableAdapter adapter = newMyExpandableAdapter(parentItems,
childItems, childimage);
adapter.setInflater(
(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE),
this);
// Set the Adapter to expandableList
expandableList.setAdapter(adapter);
expandableList.setOnChildClickListener(this);
}
// method to add parent ItemspublicvoidsetGroupParents() {
parentItems.add("Chemistry");
parentItems.add("Mathematics");
parentItems.add("Physics");
}
// method to set child data of each parentpublicvoidsetChildData() {
// Add Child Items for FruitsArrayList<String> child = newArrayList<String>();
child.add("Some Basic Concepts");
child.add("States of Matter");
child.add("Atomic Structure");
child.add("Solutions");
child.add("Chemical Energetics and Thermodynamics");
child.add("Chemical and Ionic Equilibria");
child.add("Redox Reactions and Electrochemistry");
childItems.add(child);
childimage.add(R.drawable.buy1);
childItems.add(childimage);
// Add Child Items for Animals
child = newArrayList<String>();
child.add("Physics and Measurement");
child.add("Kinematics");
child.add("Laws of Motion");
child.add("Work, Energy and Power");
child.add("Rotational Motion");
child.add("Gravitation");
child.add("Solids and Fluids");
childItems.add(child);
childItems.add(childimage);
}
publicclassMyExpandableAdapterextendsBaseExpandableListAdapter {
privateActivity activity;
privateArrayList<Object> childtems;
privateArrayList<Integer> childimage;
privateLayoutInflater inflater;
privateArrayList<String> parentItems, child;
publicMyExpandableAdapter(ArrayList<String> parents,
ArrayList<Object> childern, ArrayList<Integer> childimage) {
this.parentItems = parents;
this.childtems = childern;
this.childimage = childimage;
}
publicvoidsetInflater(LayoutInflater inflater, Activity activity) {
this.inflater = inflater;
this.activity = activity;
}
@SuppressWarnings("unchecked")
@OverridepublicViewgetChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
child = (ArrayList<String>) childtems.get(groupPosition);
TextView textView = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.child_view, null);
}
textView = (TextView) convertView.findViewById(R.id.textViewChild);
String a = child.get(childPosition);
textView.setText(child.get(childPosition));
imageView2 = (ImageView) convertView.findViewById(R.id.imageView2);
imageView2.setBackgroundResource(childimage.get(childPosition));
convertView.setOnClickListener(newOnClickListener() {
@OverridepublicvoidonClick(View view) {
}
});
return convertView;
}
@OverridepublicViewgetGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.parent_view, null);
}
((CheckedTextView) convertView).setText(parentItems
.get(groupPosition));
((CheckedTextView) convertView).setChecked(isExpanded);
return convertView;
}
@OverridepublicObjectgetChild(int groupPosition, int childPosition) {
returnnull;
}
@Overridepublic long getChildId(int groupPosition, int childPosition) {
return0;
}
@SuppressWarnings("unchecked")
@Overridepublic int getChildrenCount(int groupPosition) {
return ((ArrayList<String>) childtems.get(groupPosition)).size();
}
@OverridepublicObjectgetGroup(int groupPosition) {
returnnull;
}
@Overridepublic int getGroupCount() {
return parentItems.size();
}
@OverridepublicvoidonGroupCollapsed(int groupPosition) {
super.onGroupCollapsed(groupPosition);
}
@OverridepublicvoidonGroupExpanded(int groupPosition) {
super.onGroupExpanded(groupPosition);
}
@Overridepublic long getGroupId(int groupPosition) {
return0;
}
@OverridepublicbooleanhasStableIds() {
returnfalse;
}
@OverridepublicbooleanisChildSelectable(int groupPosition, int childPosition) {
returnfalse;
}
}
}
Solution 2:
Source Code
https://drive.google.com/open?id=0BzBKpZ4nzNzUVkExUDlqRFhtcGc
package com.keshav.expandablelistviewindrawerkeshav;
import android.os.Bundle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
publicclassDrawerActivityExpandableextendsAppCompatActivity
{
Toolbar toolbar;
privateDrawerLayout drawer;
privateExpandableListView drawerList;
privateActionBarDrawerToggle actionBarDrawerToggle;
List<String> listDataHeader;
HashMap<String, List<String>> listDataChild;
ImageView profile_image;
@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drawer_expandable);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setTitle("ABC");
// getSupportActionBar().setDisplayShowHomeEnabled(true);initDrawer();
// Listview Group click listener
drawerList.setOnGroupClickListener(newExpandableListView.OnGroupClickListener() {
@OverridepublicbooleanonGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
Toast.makeText(getApplicationContext(),
"Group Clicked " + listDataHeader.get(groupPosition),
Toast.LENGTH_SHORT).show();
returnfalse;
}
});
// Listview Group expanded listener
drawerList.setOnGroupExpandListener(newExpandableListView.OnGroupExpandListener() {
// TODO Colapse Here Using this... in android
int previousGroup = -1;
boolean flag = false;
@OverridepublicvoidonGroupExpand(int groupPosition) {
Log.e("keshav", "onGroupClick is -> " + groupPosition);
Toast.makeText(getApplicationContext(),
listDataHeader.get(groupPosition) + " Expanded",
Toast.LENGTH_SHORT).show();
if (groupPosition != previousGroup && flag) {
drawerList.collapseGroup(previousGroup);
}
previousGroup = groupPosition;
flag = true;
if(groupPosition==0 ||groupPosition==1||groupPosition==4){
drawer.closeDrawer(drawerList);
toolbar.setTitle(""+listDataHeader.get(groupPosition));
}
}
});
// Listview Group collasped listener
drawerList.setOnGroupCollapseListener(newExpandableListView.OnGroupCollapseListener() {
@OverridepublicvoidonGroupCollapse(int groupPosition) {
Toast.makeText(getApplicationContext(),
listDataHeader.get(groupPosition) + " Collapsed",
Toast.LENGTH_SHORT).show();
}
});
// Todo Listview on child click listener
drawerList.setOnChildClickListener(newExpandableListView.OnChildClickListener() {
@OverridepublicbooleanonChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
// TODO Auto-generated method stubToast.makeText(
getApplicationContext(),
listDataHeader.get(groupPosition)
+ " : keshav : "
+ listDataChild.get(
listDataHeader.get(groupPosition)).get(
childPosition), Toast.LENGTH_SHORT)
.show();
Log.e("keshav","Child Data 1->"+listDataHeader.get(groupPosition));
Log.e("keshav","Child Data 2->"+listDataChild.get(listDataHeader.get(groupPosition)).get(childPosition));
toolbar.setTitle(""+listDataChild.get(listDataHeader.get(groupPosition)).get(childPosition));
// if(groupPosition==2 ||groupPosition==3)
drawer.closeDrawer(drawerList);
returnfalse;
}
});
profile_image.setOnClickListener(newView.OnClickListener() {
@OverridepublicvoidonClick(View arg0) {
Log.e("Keshav", "Clck Profile Image");
/*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int permissionCheck = ContextCompat.checkSelfPermission(DrawerActivity.this,
Manifest.permission.CAMERA);
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
//showing dialog to select image
selectImage();
Log.e("permission", "granted");
} else {
ActivityCompat.requestPermissions(DrawerActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA}, 1);
}
} else {
selectImage();
}*/
}
});
}
privatevoidinitDrawer() {
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerList = (ExpandableListView) findViewById(R.id.left_drawer);
View header = getLayoutInflater().inflate(R.layout.nav_header_main, null);
drawerList.addHeaderView(header);
drawer.setDrawerShadow(R.mipmap.drawer_shadow, GravityCompat.START);
profile_image = (ImageView) header.findViewById(R.id.user_profile_image);
profile_image.setBackgroundResource(R.mipmap.keshav);
// getSupportActionBar().setDisplayHomeAsUpEnabled(true);// getSupportActionBar().setHomeButtonEnabled(true);// preparing list dataprepareListData();
drawerList.setAdapter(newNavigationDrawerExpandableAdapter(this, listDataHeader, listDataChild));
// drawerList.setOnChildClickListener(this);
actionBarDrawerToggle = newActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open, R.string.drawer_close) {
@OverridepublicvoidonDrawerClosed(View drawerView) {
// Code here will be triggered once the drawer closes as we don't want anything to happen so we leave this blanksuper.onDrawerClosed(drawerView);
}
@OverridepublicvoidonDrawerOpened(View drawerView) {
// Code here will be triggered once the drawer open as we don't want anything to happen so we leave this blanksuper.onDrawerOpened(drawerView);
}
};
//Setting the actionbarToggle to drawer layout
drawer.setDrawerListener(actionBarDrawerToggle);
//calling sync state is necessay or else your hamburger icon wont show up
actionBarDrawerToggle.syncState();
}
/*
* Preparing the list data
*/privatevoidprepareListData() {
listDataHeader = newArrayList<String>();
listDataChild = newHashMap<String, List<String>>();
// Adding child data
listDataHeader.add("Dashboard");
listDataHeader.add("Enter Manually");
listDataHeader.add("Profile");
listDataHeader.add("Reports");
listDataHeader.add("Logout");
// TODO Adding child dataList<String> nowShowing = newArrayList<String>();
nowShowing.add("My Profile");
nowShowing.add("Change Password");
List<String> blank = newArrayList<String>();
List<String> report = newArrayList<String>();
report.add("Batch Wise Report");
report.add("Location Wise Report");
report.add("Date Wise Report");
listDataChild.put(listDataHeader.get(0), blank);
listDataChild.put(listDataHeader.get(1), blank); // Header, Child data
listDataChild.put(listDataHeader.get(2), nowShowing);
listDataChild.put(listDataHeader.get(3), report);
listDataChild.put(listDataHeader.get(4), blank);
}
}
-------------------------------
Adapter
------------------------------
package com.keshav.expandablelistviewindrawerkeshav;
import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.HashMap;
import java.util.List;
/**
* Created by root on 11/12/15.
*/publicclassNavigationDrawerExpandableAdapterextendsBaseExpandableListAdapter {
publicLayoutInflater minflater;
publicActivity activity;
privateContext _context;
privateList<String> _listDataHeader; // header titles// child data in format of header title, child titleprivateHashMap<String, List<String>> _listDataChild;
publicNavigationDrawerExpandableAdapter(Context context, List<String> listDataHeader,
HashMap<String, List<String>> listChildData) {
this._context = context;
this._listDataHeader = listDataHeader;
this._listDataChild = listChildData;
}
publicvoidsetInflater(LayoutInflater mInflater, Activity act) {
this.minflater = mInflater;
activity = act;
}
@OverridepublicObjectgetChild(int groupPosition, int childPosititon) {
returnthis._listDataChild.get(this._listDataHeader.get(groupPosition))
.get(childPosititon);
}
@Overridepublic long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@OverridepublicViewgetChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final String childText = (String) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_item, null);
}
TextView txtListChild = (TextView) convertView
.findViewById(R.id.lblListItem);
txtListChild.setText(childText);
//TODO set Hard Code Child itemImageView iv_ListChild = (ImageView) convertView
.findViewById(R.id.iv_ListChild);
txtListChild.setText(childText);
Log.e("Keshav", "childText 1 -> " + childText);
if (childText.equals("My Profile")){
iv_ListChild.setBackgroundResource(R.mipmap.youtuben);
}elseif (childText.equals("Change Password")){
iv_ListChild.setBackgroundResource(R.mipmap.facebook);
}elseif (childText.equals("Batch Wise Report")){
iv_ListChild.setBackgroundResource(R.mipmap.googleplus);
}elseif (childText.equals("Location Wise Report")){
iv_ListChild.setBackgroundResource(R.mipmap.linkedin);
}elseif (childText.equals("Date Wise Report")){
iv_ListChild.setBackgroundResource(R.mipmap.twitter);
}else {
iv_ListChild.setBackgroundResource(R.mipmap.ic_launcher_round);
}
//TODO set Hard Code Child itemreturn convertView;
}
@Overridepublic int getChildrenCount(int groupPosition) {
returnthis._listDataChild.get(this._listDataHeader.get(groupPosition))
.size();
}
@OverridepublicObjectgetGroup(int groupPosition) {
returnthis._listDataHeader.get(groupPosition);
}
@Overridepublic int getGroupCount() {
returnthis._listDataHeader.size();
}
@Overridepublic long getGroupId(int groupPosition) {
return groupPosition;
}
@OverridepublicvoidonGroupCollapsed(int groupPosition) {
super.onGroupCollapsed(groupPosition);
}
@OverridepublicvoidonGroupExpanded(int groupPosition) {
super.onGroupExpanded(groupPosition);
}
@OverridepublicViewgetGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
String headerTitle = (String) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_group, null);
}
TextView lblListHeader = (TextView) convertView
.findViewById(R.id.lblListHeader);
lblListHeader.setTypeface(null, Typeface.NORMAL); // TODO Set Text Color BOLD Here
lblListHeader.setText(headerTitle);
Log.e("keshav","groupPosition "+groupPosition);
ImageView iv_ListHeader = (ImageView) convertView
.findViewById(R.id.iv_ListHeader);
if(groupPosition==0)
iv_ListHeader.setBackgroundResource(R.mipmap.changepassword_48);
elseif(groupPosition==1)
iv_ListHeader.setBackgroundResource(R.mipmap.barcode_48);
elseif(groupPosition==2)
iv_ListHeader.setBackgroundResource(R.mipmap.changepassword_48);
elseif(groupPosition==3)
iv_ListHeader.setBackgroundResource(R.mipmap.enter_manualy_48);
else
iv_ListHeader.setBackgroundResource(R.mipmap.ic_launcher);
return convertView;
}
@OverridepublicbooleanhasStableIds() {
returnfalse;
}
@OverridepublicbooleanisChildSelectable(int groupPosition, int childPosition) {
returntrue;
}
}
------------------------------------
activity_drawer.xml
-------------------------------------
<android.support.v4.widget.DrawerLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/drawer_layout"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:id="@+id/container_toolbar"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><includeandroid:id="@+id/toolbar"layout="@layout/toolbar" /></LinearLayout><FrameLayoutandroid:id="@+id/fllContent"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1" /></LinearLayout><ExpandableListViewandroid:id="@+id/left_drawer"android:layout_width="240dp"android:layout_height="match_parent"android:layout_gravity="start"android:groupIndicator="@null"android:dividerHeight="1dp"android:divider="@color/list_divider"android:listSelector="@drawable/list_selector"android:background="@color/list_background" /><!--android:groupIndicator="@null"--></android.support.v4.widget.DrawerLayout>
------------------------------------
listgroup.xml
------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="40dp"android:orientation="horizontal"android:background="@drawable/list_selector"><ImageViewandroid:id="@+id/iv_ListHeader"android:layout_width="25dp"android:layout_height="25dp"android:layout_marginTop="10dp"android:layout_marginLeft="10dp"android:layout_marginBottom="10dp"android:background="@mipmap/ic_launcher" /><TextViewandroid:id="@+id/lblListHeader"style="@style/TextViewSmallBlack"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginTop="5dp"android:layout_marginLeft="10dp"android:layout_marginBottom="10dp"android:gravity="left"android:paddingBottom="5dp"android:paddingTop="5dp"android:text="list group"android:textSize="14sp"
/></LinearLayout>
------------------------------------
listitem.xml
------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="40dp"android:orientation="horizontal"android:background="@drawable/list_selector"><ImageViewandroid:id="@+id/iv_ListChild"android:layout_width="25dp"android:layout_height="25dp"android:layout_marginTop="10dp"android:layout_marginLeft="40dp"android:layout_marginBottom="10dp"android:background="@mipmap/ic_launcher" /><TextViewandroid:id="@+id/lblListItem"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="14dip"style="@style/TextViewSmallBlack"android:layout_marginTop="5dp"android:layout_marginLeft="10dp"android:gravity="left"android:paddingBottom="5dp"android:paddingTop="5dp"android:text="list group"
/></LinearLayout>
------------------------------------
navheader.xml
------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="190dp"android:gravity="start"android:background="@color/colorPrimary"android:orientation="vertical"><!--android:background="@color/com_facebook_button_background_color_disabled"--><de.hdodenhof.circleimageview.CircleImageViewxmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/user_profile_image"android:layout_width="90dp"android:layout_height="90dp"android:layout_marginLeft="20dp"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:layout_marginTop="40dp"app:border_color="@color/click_tick" /><TextViewandroid:id="@+id/userName"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/user_profile_image"android:layout_centerHorizontal="true"android:layout_marginLeft="20dp"android:layout_marginTop="10dp"android:gravity="left"android:text="Keshav Gera"android:textColor="@color/white"android:textSize="16sp"android:textStyle="bold" /><!--android:textSize="14sp"--><TextViewandroid:id="@+id/usertype"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:gravity="left"android:layout_marginLeft="20dp"android:layout_marginTop="10dp"android:layout_marginBottom="5dp"android:textSize="10sp"android:textColor="#fff"android:layout_alignParentBottom="true"android:layout_alignLeft="@+id/userName"android:layout_alignStart="@+id/userName" /><!--android:textSize="14sp"--></LinearLayout>
<!--
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="@dimen/nav_header_height"android:background="@drawable/side_nav_bar"android:gravity="bottom"android:orientation="vertical"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:theme="@style/ThemeOverlay.AppCompat.Dark"><ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingTop="@dimen/nav_header_vertical_spacing"android:src="@android:drawable/sym_def_app_icon" /><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingTop="@dimen/nav_header_vertical_spacing"android:text="Android Studio"android:textAppearance="@style/TextAppearance.AppCompat.Body1" /><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="android.studio@android.com" /></LinearLayout>
-->
------------------------------------
toolbar.xml
------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbarxmlns:android="http://schemas.android.com/apk/res/android"xmlns:local="http://schemas.android.com/apk/res-auto"android:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="wrap_content"android:minHeight="?attr/actionBarSize"android:background="?attr/colorPrimary"local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
Post a Comment for "Android Expandablelistview With 6 To 7 Textviews And An Imageview As Child Views"