Blog purpose for android basic example for android app developer. any query please my contact

Monday, 18 May 2020

expandable list view in android example

expandable list view in android example

In this Article today learn expandable list view in android example. expandable listview using an android studio. There are using parent and child array adapter in this listview. Follow the methods expandable listview. For the previous tutorial custom adapter listview in android follow the link.

 

First declaire variable :

ExpandableListAdapter listAdapter;

    ExpandableListView expListView;

    List<String> listDataHeader;

    HashMap<String, List<String>> listDataChild;

 

 

Then  create a populate() function:

private void prepareListData() {

        listDataHeader = new ArrayList<String>();

        listDataChild = new HashMap<String, List<String>>();

 

        // Adding child data

        listDataHeader.add("Programming Langauge");

        listDataHeader.add("Fruit name");

        listDataHeader.add("country");

 

        // Adding child data

        List<String> top250 = new ArrayList<String>();

        top250.add("Android");

        top250.add("java");

        top250.add("c#.net");

        top250.add("php");

        top250.add("html");

        top250.add("Advance java");

        top250.add("python");

 

        List<String> nowShowing = new ArrayList<String>();

        nowShowing.add("Orange");

        nowShowing.add("Apple");

        nowShowing.add("lemon");

        nowShowing.add("mango");

        nowShowing.add("banana");

        nowShowing.add("pynapal");

 

        List<String> comingSoon = new ArrayList<String>();

        comingSoon.add("India");

        comingSoon.add("United State");

        comingSoon.add("Shrilanka");

        comingSoon.add("japan");

        comingSoon.add("Nepal");

 

        listDataChild.put(listDataHeader.get(0), top250); // Header, Child data

        listDataChild.put(listDataHeader.get(1), nowShowing);

        listDataChild.put(listDataHeader.get(2), comingSoon);

    }

 

 

Then  declaire a listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);

 

Create a ExpandableListAdapter java class follow the method :

Declair a variable :

private Context _context;

                private List<String> _listDataHeader; // header titles

                // child data in format of header title, child title

                private HashMap<String, List<String>> _listDataChild;

 


then crete a follow function in this class:

@Override

                public Object getChild(int groupPosition, int childPosititon) {

                                return this._listDataChild.get(this._listDataHeader.get(groupPosition))

                                                                .get(childPosititon);

                }

 

                @Override

                public long getChildId(int groupPosition, int childPosition) {

                                return childPosition;

                }

 

                @Override

                public View getChildView(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);

                                return convertView;

                }

 

                @Override

                public int getChildrenCount(int groupPosition) {

                                return this._listDataChild.get(this._listDataHeader.get(groupPosition))

                                                                .size();

                }

 

                @Override

                public Object getGroup(int groupPosition) {

                                return this._listDataHeader.get(groupPosition);

                }

 

                @Override

                public int getGroupCount() {

                                return this._listDataHeader.size();

                }

 

                @Override

                public long getGroupId(int groupPosition) {

                                return groupPosition;

                }

 

                @Override

                public View getGroupView(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.BOLD);

                                lblListHeader.setText(headerTitle);

 

                                return convertView;

                }

 

                @Override

                public boolean hasStableIds() {

                                return false;

                }

 

                @Override

                public boolean isChildSelectable(int groupPosition, int childPosition) {

                                return true;

                }


Follow the full source code expandable list view in android example.


1.MainActivity.java:

package com.akash.expandblelistview;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.ExpandableListView;

import android.widget.ExpandableListView.OnChildClickListener;

import android.widget.ExpandableListView.OnGroupClickListener;

import android.widget.ExpandableListView.OnGroupCollapseListener;

import android.widget.ExpandableListView.OnGroupExpandListener;

import android.widget.Toast;


public class MainActivity extends Activity {


    ExpandableListAdapter listAdapter;

    ExpandableListView expListView;

    List<String> listDataHeader;

    HashMap<String, List<String>> listDataChild;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        // get the listview

        expListView = (ExpandableListView) findViewById(R.id.lvExp);


        // preparing list data

        prepareListData();


        listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);


        // setting list adapter

        expListView.setAdapter(listAdapter);


        // Listview Group click listener

        expListView.setOnGroupClickListener(new OnGroupClickListener() {


            @Override

            public boolean onGroupClick(ExpandableListView parent, View v,

                                        int groupPosition, long id) {


                return false;

            }

        });


        // Listview Group expanded listener

        expListView.setOnGroupExpandListener(new OnGroupExpandListener() {


            @Override

            public void onGroupExpand(int groupPosition) {

                Toast.makeText(getApplicationContext(),

                        listDataHeader.get(groupPosition) + " Expanded",

                        Toast.LENGTH_SHORT).show();

            }

        });


        // Listview Group collasped listener

        expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {


            @Override

            public void onGroupCollapse(int groupPosition) {

                Toast.makeText(getApplicationContext(),

                        listDataHeader.get(groupPosition) + " Collapsed",

                        Toast.LENGTH_SHORT).show();


            }

        });


        // Listview on child click listener

        expListView.setOnChildClickListener(new OnChildClickListener() {


            @Override

            public boolean onChildClick(ExpandableListView parent, View v,

                                        int groupPosition, int childPosition, long id) {

                // TODO Auto-generated method stub

                Toast.makeText(

                        getApplicationContext(),

                        listDataHeader.get(groupPosition)

                                + " : "

                                + listDataChild.get(

                                listDataHeader.get(groupPosition)).get(

                                childPosition), Toast.LENGTH_SHORT)

                        .show();

                return false;

            }

        });

    }


    /*

     * Preparing the list data

     */

    private void prepareListData() {

        listDataHeader = new ArrayList<String>();

        listDataChild = new HashMap<String, List<String>>();


        // Adding child data

        listDataHeader.add("Programming Langauge");

        listDataHeader.add("Fruit name");

        listDataHeader.add("country");


        // Adding child data

        List<String> top250 = new ArrayList<String>();

        top250.add("Android");

        top250.add("java");

        top250.add("c#.net");

        top250.add("php");

        top250.add("html");

        top250.add("Advance java");

        top250.add("python");


        List<String> nowShowing = new ArrayList<String>();

        nowShowing.add("Orange");

        nowShowing.add("Apple");

        nowShowing.add("lemon");

        nowShowing.add("mango");

        nowShowing.add("banana");

        nowShowing.add("pynapal");


        List<String> comingSoon = new ArrayList<String>();

        comingSoon.add("India");

        comingSoon.add("United State");

        comingSoon.add("Shrilanka");

        comingSoon.add("japan");

        comingSoon.add("Nepal");


        listDataChild.put(listDataHeader.get(0), top250); // Header, Child data

        listDataChild.put(listDataHeader.get(1), nowShowing);

        listDataChild.put(listDataHeader.get(2), comingSoon);

    }

}




2.Create class ExpandableListAdapter.java:

package com.akash.expandblelistview;

import java.util.HashMap;
import java.util.List;

import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;

public class ExpandableListAdapter extends BaseExpandableListAdapter {

private Context _context;
private List<String> _listDataHeader; // header titles
// child data in format of header title, child title
private HashMap<String, List<String>> _listDataChild;

public ExpandableListAdapter(Context context, List<String> listDataHeader,
HashMap<String, List<String>> listChildData) {
this._context = context;
this._listDataHeader = listDataHeader;
this._listDataChild = listChildData;
}

@Override
public Object getChild(int groupPosition, int childPosititon) {
return this._listDataChild.get(this._listDataHeader.get(groupPosition))
.get(childPosititon);
}

@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}

@Override
public View getChildView(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);
return convertView;
}

@Override
public int getChildrenCount(int groupPosition) {
return this._listDataChild.get(this._listDataHeader.get(groupPosition))
.size();
}

@Override
public Object getGroup(int groupPosition) {
return this._listDataHeader.get(groupPosition);
}

@Override
public int getGroupCount() {
return this._listDataHeader.size();
}

@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}

@Override
public View getGroupView(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.BOLD);
lblListHeader.setText(headerTitle);

return convertView;
}

@Override
public boolean hasStableIds() {
return false;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}

}

3.cretae an activity_main.xml:

<?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="fill_parent"
    android:orientation="vertical"
    android:background="#f4f4f4" >

            <ExpandableListView
                android:id="@+id/lvExp"
                android:layout_height="match_parent"
                android:layout_width="match_parent"
                android:cacheColorHint="#00000000"/>   

</LinearLayout>

4.create a layout file  list_group.xml:

<?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"
    android:padding="8dp" 
    android:background="#000000">


    <TextView
        android:id="@+id/lblListHeader"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
        android:textSize="17dp"
        android:textColor="#f9f93d" />

</LinearLayout>

5.create a layout file list_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="55dip"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/lblListItem"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="17dip"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:textColor="#000000"
        android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft" />

</LinearLayout>


6.AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.akash.expandblelistview">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

7.output:

expandable list view in android example




expandable list view in android example




No comments:

Post a Comment