Java:
package zaihuishou.com.expandablerecyclerview;
import
android.content.Context;
import
android.os.Build;
import
android.os.Bundle;
import
android.support.annotation.RequiresApi;
import
android.support.v7.app.AppCompatActivity;
import
android.util.DisplayMetrics;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.BaseExpandableListAdapter;
import
android.widget.ExpandableListView;
import
android.widget.ImageView;
import
android.widget.TextView;
import
java.util.List;
import
zaihuishou.com.expandablerecyclerview.loader.listener.ServiceResponseListener;
import
zaihuishou.com.expandablerecyclerview.loader.manager.ServiceManager;
import
zaihuishou.com.expandablerecyclerview.navcategory.FirstLevelCategory;
import
zaihuishou.com.expandablerecyclerview.navcategory.NavigationGategoryBaseResponse;
import
zaihuishou.com.expandablerecyclerview.navcategory.SecondLevelCategory;
public
class TestActivity extends AppCompatActivity {
private ExpandableListView
expandableListView;
private Context
context;
@Override protected
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
context =
this;
expandableListView
= (ExpandableListView) findViewById(R.id.mainList);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width
= metrics.widthPixels;
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
expandableListView.setIndicatorBounds(width
- GetPixelFromDips(50), width -
GetPixelFromDips(10));
} else {
expandableListView.setIndicatorBoundsRelative(width
- GetPixelFromDips(50), width -
GetPixelFromDips(10));
}
addNavigationList();
}
public int GetPixelFromDips(float pixels) {
// Get the screen's density
scale final
float scale = getResources().getDisplayMetrics().density;
// Convert the dps to pixels, based
on density scale return (int) ((scale
* pixels + 0.5f) - 5);
}
public void addNavigationList()
{
ServiceManager.navigationList(getApplicationContext(),
new ServiceResponseListener<NavigationGategoryBaseResponse>()
{
@Override public void onSuccess(NavigationGategoryBaseResponse
response) {
expandableListView.setAdapter(new TestActivity.ParentLevel(context, response.getMainCategories()));
}
@Override public void onFailure(Throwable throwable, String
errorResponse) {
}
}
);
}
public class ParentLevel
extends BaseExpandableListAdapter {
private Context
context;
private List<FirstLevelCategory>
firstLevelCategories;
public ParentLevel(Context
context, List<FirstLevelCategory> firstLevelCategoryList) {
this.context = context;
this.firstLevelCategories = firstLevelCategoryList;
}
@Override public Object
getChild(int arg0, int
arg1) {
return arg1;
}
@Override public
long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@RequiresApi(api
= Build.VERSION_CODES.JELLY_BEAN)
@Override public View
getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
TestActivity.SecondLevelExpandableListView secondLevelELV = new TestActivity.SecondLevelExpandableListView(TestActivity.this);
secondLevelELV.setAdapter(new TestActivity.SecondLevelAdapter(context, firstLevelCategories.get(groupPosition).getSubGrouphs().get(childPosition)));
secondLevelELV.setGroupIndicator(getResources().getDrawable(R.drawable.settings_selector));
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width
= metrics.widthPixels;
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
secondLevelELV.setIndicatorBounds(width
- GetPixelFromDips(50), width -
GetPixelFromDips(10));
} else {
secondLevelELV.setIndicatorBoundsRelative(width - GetPixelFromDips(50), width - GetPixelFromDips(10));
}
return secondLevelELV;
}
@Override public
int getChildrenCount(int groupPosition)
{
return firstLevelCategories.get(groupPosition).getSubGrouphs().size();
}
@Override public Object
getGroup(int groupPosition) {
return groupPosition;
}
@Override public
int getGroupCount() {
return firstLevelCategories.size();
}
@Override public
long getGroupId(int groupPosition) {
return groupPosition;
}
@RequiresApi(api
= Build.VERSION_CODES.JELLY_BEAN)
@Override public View
getGroupView(int groupPosition, final boolean isExpanded, View convertView, ViewGroup
parent) {
if (convertView
== null) {
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView =
inflater.inflate(R.layout.row_first, null);
TextView text = (TextView)
convertView.findViewById(R.id.eventsListEventRowText);
final ImageView
icon = (ImageView) convertView.findViewById(R.id.icon);
String name = firstLevelCategories.get(groupPosition).getCategoryname();
if (name.equals(context.getString(R.string.Fancy))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.fancy));
} else
if (name.equals(context.getString(R.string.Women))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.women));
} else
if (name.equals(context.getString(R.string.Office))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.stationary));
} else
if (name.equals(context.getString(R.string.BooksMore))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.books));
} else
if (name.equals(context.getString(R.string.Men))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.businessman));
} else
if (name.equals(context.getString(R.string.DailyNeeds))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.calendar));
} else
if (name.equals(context.getString(R.string.Garments))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.garments));
} else
if (name.equals(context.getString(R.string.BabyKids))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.babykids));
} else
if (name.equals(context.getString(R.string.Fashion))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.fasion));
} else
if (name.equals(context.getString(R.string.Electronics))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.elctronics));
}
text.setText(name);
}
return convertView;
}
@Override public
boolean hasStableIds() {
return
true;
}
@Override public
boolean isChildSelectable(int groupPosition,
int childPosition) {
return
true;
}
}
public class SecondLevelExpandableListView
extends ExpandableListView {
public SecondLevelExpandableListView(Context
context) {
super(context);
}
protected void
onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
heightMeasureSpec = MeasureSpec.makeMeasureSpec(999999, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec,
heightMeasureSpec);
}
}
public class SecondLevelAdapter
extends BaseExpandableListAdapter {
private Context
context;
private SecondLevelCategory
secondLevelCategories;
public SecondLevelAdapter(Context
context, SecondLevelCategory secondLevelCategories) {
this.context = context;
this.secondLevelCategories = secondLevelCategories;
}
@Override public Object
getGroup(int groupPosition) {
return groupPosition;
}
@Override public
int getGroupCount() {
return 1;
}
@Override public
long getGroupId(int groupPosition) {
return groupPosition;
}
@Override public View getGroupView(int
groupPosition, boolean isExpanded, View
convertView, ViewGroup parent) {
if (convertView
== null) {
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView =
inflater.inflate(R.layout.row_third, null);
TextView text = (TextView)
convertView.findViewById(R.id.eventsListEventRowText);
text.setText(secondLevelCategories.getSubcategoryname());
}
return convertView;
}
@Override public Object
getChild(int groupPosition, int childPosition) {
return childPosition;
}
@Override public
long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override public View
getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
if (convertView
== null) {
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView =
inflater.inflate(R.layout.row_second,
null);
TextView text = (TextView)
convertView.findViewById(R.id.eventsListEventRowText);
text.setText(secondLevelCategories.getThirdLevelCategoryList().get(childPosition).getLowersubcategoryname());
}
return convertView;
}
@Override public
int getChildrenCount(int groupPosition)
{
return secondLevelCategories.getThirdLevelCategoryList().size();
}
@Override public
boolean hasStableIds() {
return
true;
}
@Override public
boolean isChildSelectable(int groupPosition,
int childPosition) {
return
true;
}
}
}
main.Xml:
<?xml
version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_test"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="zaihuishou.com.expandablerecyclerview.TestActivity"><ExpandableListViewandroid:id="@+id/mainList"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffffff"android:groupIndicator="@drawable/settings_selector"android:transcriptMode="alwaysScroll"></ExpandableListView></RelativeLayout>
rowfirst.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="100dp"android:orientation="horizontal"android:padding="10dp"><ImageViewandroid:id="@+id/icon"android:layout_width="25dp"android:layout_height="25dp"android:layout_alignParentLeft="true"
/><TextViewandroid:id="@+id/eventsListEventRowText"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_toLeftOf="@+id/plus"android:layout_toRightOf="@+id/icon"android:textColor="@android:color/background_dark"android:textSize="15sp"
/></LinearLayout>
rowsecond.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="match_parent"android:orientation="vertical"android:padding="10dp"><TextViewandroid:id="@+id/eventsListEventRowText"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingLeft="20dp"
/></LinearLayout>
rowthird.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="match_parent"android:orientation="vertical"android:padding="10dp"><TextViewandroid:id="@+id/eventsListEventRowText"android:layout_width="match_parent"android:layout_height="wrap_content"
/></LinearLayout>
Java:
package zaihuishou.com.expandablerecyclerview;
import
android.content.Context;
import
android.os.Build;
import
android.os.Bundle;
import
android.support.annotation.RequiresApi;
import
android.support.v7.app.AppCompatActivity;
import
android.util.DisplayMetrics;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.BaseExpandableListAdapter;
import
android.widget.ExpandableListView;
import
android.widget.ImageView;
import
android.widget.TextView;
import
java.util.List;
import
zaihuishou.com.expandablerecyclerview.loader.listener.ServiceResponseListener;
import
zaihuishou.com.expandablerecyclerview.loader.manager.ServiceManager;
import
zaihuishou.com.expandablerecyclerview.navcategory.FirstLevelCategory;
import
zaihuishou.com.expandablerecyclerview.navcategory.NavigationGategoryBaseResponse;
import
zaihuishou.com.expandablerecyclerview.navcategory.SecondLevelCategory;
public
class TestActivity extends AppCompatActivity {
private ExpandableListView
expandableListView;
private Context
context;
@Override protected
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
context =
this;
expandableListView
= (ExpandableListView) findViewById(R.id.mainList);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width
= metrics.widthPixels;
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
expandableListView.setIndicatorBounds(width
- GetPixelFromDips(50), width -
GetPixelFromDips(10));
} else {
expandableListView.setIndicatorBoundsRelative(width
- GetPixelFromDips(50), width -
GetPixelFromDips(10));
}
addNavigationList();
}
public int GetPixelFromDips(float pixels) {
// Get the screen's density
scale final
float scale = getResources().getDisplayMetrics().density;
// Convert the dps to pixels, based
on density scale return (int) ((scale
* pixels + 0.5f) - 5);
}
public void addNavigationList()
{
ServiceManager.navigationList(getApplicationContext(),
new ServiceResponseListener<NavigationGategoryBaseResponse>()
{
@Override public void onSuccess(NavigationGategoryBaseResponse
response) {
expandableListView.setAdapter(new TestActivity.ParentLevel(context, response.getMainCategories()));
}
@Override public void onFailure(Throwable throwable, String
errorResponse) {
}
}
);
}
public class ParentLevel
extends BaseExpandableListAdapter {
private Context
context;
private List<FirstLevelCategory>
firstLevelCategories;
public ParentLevel(Context
context, List<FirstLevelCategory> firstLevelCategoryList) {
this.context = context;
this.firstLevelCategories = firstLevelCategoryList;
}
@Override public Object
getChild(int arg0, int
arg1) {
return arg1;
}
@Override public
long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@RequiresApi(api
= Build.VERSION_CODES.JELLY_BEAN)
@Override public View
getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
TestActivity.SecondLevelExpandableListView secondLevelELV = new TestActivity.SecondLevelExpandableListView(TestActivity.this);
secondLevelELV.setAdapter(new TestActivity.SecondLevelAdapter(context, firstLevelCategories.get(groupPosition).getSubGrouphs().get(childPosition)));
secondLevelELV.setGroupIndicator(getResources().getDrawable(R.drawable.settings_selector));
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width
= metrics.widthPixels;
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
secondLevelELV.setIndicatorBounds(width
- GetPixelFromDips(50), width -
GetPixelFromDips(10));
} else {
secondLevelELV.setIndicatorBoundsRelative(width - GetPixelFromDips(50), width - GetPixelFromDips(10));
}
return secondLevelELV;
}
@Override public
int getChildrenCount(int groupPosition)
{
return firstLevelCategories.get(groupPosition).getSubGrouphs().size();
}
@Override public Object
getGroup(int groupPosition) {
return groupPosition;
}
@Override public
int getGroupCount() {
return firstLevelCategories.size();
}
@Override public
long getGroupId(int groupPosition) {
return groupPosition;
}
@RequiresApi(api
= Build.VERSION_CODES.JELLY_BEAN)
@Override public View
getGroupView(int groupPosition, final boolean isExpanded, View convertView, ViewGroup
parent) {
if (convertView
== null) {
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView =
inflater.inflate(R.layout.row_first, null);
TextView text = (TextView)
convertView.findViewById(R.id.eventsListEventRowText);
final ImageView
icon = (ImageView) convertView.findViewById(R.id.icon);
String name = firstLevelCategories.get(groupPosition).getCategoryname();
if (name.equals(context.getString(R.string.Fancy))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.fancy));
} else
if (name.equals(context.getString(R.string.Women))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.women));
} else
if (name.equals(context.getString(R.string.Office))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.stationary));
} else
if (name.equals(context.getString(R.string.BooksMore))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.books));
} else
if (name.equals(context.getString(R.string.Men))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.businessman));
} else
if (name.equals(context.getString(R.string.DailyNeeds))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.calendar));
} else
if (name.equals(context.getString(R.string.Garments))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.garments));
} else
if (name.equals(context.getString(R.string.BabyKids))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.babykids));
} else
if (name.equals(context.getString(R.string.Fashion))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.fasion));
} else
if (name.equals(context.getString(R.string.Electronics))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.elctronics));
}
text.setText(name);
}
return convertView;
}
@Override public
boolean hasStableIds() {
return
true;
}
@Override public
boolean isChildSelectable(int groupPosition,
int childPosition) {
return
true;
}
}
public class SecondLevelExpandableListView
extends ExpandableListView {
public SecondLevelExpandableListView(Context
context) {
super(context);
}
protected void
onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
heightMeasureSpec = MeasureSpec.makeMeasureSpec(999999, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec,
heightMeasureSpec);
}
}
public class SecondLevelAdapter
extends BaseExpandableListAdapter {
private Context
context;
private SecondLevelCategory
secondLevelCategories;
public SecondLevelAdapter(Context
context, SecondLevelCategory secondLevelCategories) {
this.context = context;
this.secondLevelCategories = secondLevelCategories;
}
@Override public Object
getGroup(int groupPosition) {
return groupPosition;
}
@Override public
int getGroupCount() {
return 1;
}
@Override public
long getGroupId(int groupPosition) {
return groupPosition;
}
@Override public View getGroupView(int
groupPosition, boolean isExpanded, View
convertView, ViewGroup parent) {
if (convertView
== null) {
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView =
inflater.inflate(R.layout.row_third, null);
TextView text = (TextView)
convertView.findViewById(R.id.eventsListEventRowText);
text.setText(secondLevelCategories.getSubcategoryname());
}
return convertView;
}
@Override public Object
getChild(int groupPosition, int childPosition) {
return childPosition;
}
@Override public
long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override public View
getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
if (convertView
== null) {
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView =
inflater.inflate(R.layout.row_second,
null);
TextView text = (TextView)
convertView.findViewById(R.id.eventsListEventRowText);
text.setText(secondLevelCategories.getThirdLevelCategoryList().get(childPosition).getLowersubcategoryname());
}
return convertView;
}
@Override public
int getChildrenCount(int groupPosition)
{
return secondLevelCategories.getThirdLevelCategoryList().size();
}
@Override public
boolean hasStableIds() {
return
true;
}
@Override public
boolean isChildSelectable(int groupPosition,
int childPosition) {
return
true;
}
}
}
main.Xml:
<?xml
version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_test"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="zaihuishou.com.expandablerecyclerview.TestActivity"><ExpandableListViewandroid:id="@+id/mainList"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffffff"android:groupIndicator="@drawable/settings_selector"android:transcriptMode="alwaysScroll"></ExpandableListView></RelativeLayout>
rowfirst.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="100dp"android:orientation="horizontal"android:padding="10dp"><ImageViewandroid:id="@+id/icon"android:layout_width="25dp"android:layout_height="25dp"android:layout_alignParentLeft="true"
/><TextViewandroid:id="@+id/eventsListEventRowText"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_toLeftOf="@+id/plus"android:layout_toRightOf="@+id/icon"android:textColor="@android:color/background_dark"android:textSize="15sp"
/></LinearLayout>
rowsecond.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="match_parent"android:orientation="vertical"android:padding="10dp"><TextViewandroid:id="@+id/eventsListEventRowText"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingLeft="20dp"
/></LinearLayout>
rowthird.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="match_parent"android:orientation="vertical"android:padding="10dp"><TextViewandroid:id="@+id/eventsListEventRowText"android:layout_width="match_parent"android:layout_height="wrap_content"
/></LinearLayout>
Java:
package zaihuishou.com.expandablerecyclerview;
import
android.content.Context;
import
android.os.Build;
import
android.os.Bundle;
import
android.support.annotation.RequiresApi;
import
android.support.v7.app.AppCompatActivity;
import
android.util.DisplayMetrics;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.BaseExpandableListAdapter;
import
android.widget.ExpandableListView;
import
android.widget.ImageView;
import
android.widget.TextView;
import
java.util.List;
import
zaihuishou.com.expandablerecyclerview.loader.listener.ServiceResponseListener;
import
zaihuishou.com.expandablerecyclerview.loader.manager.ServiceManager;
import
zaihuishou.com.expandablerecyclerview.navcategory.FirstLevelCategory;
import
zaihuishou.com.expandablerecyclerview.navcategory.NavigationGategoryBaseResponse;
import
zaihuishou.com.expandablerecyclerview.navcategory.SecondLevelCategory;
public
class TestActivity extends AppCompatActivity {
private ExpandableListView
expandableListView;
private Context
context;
@Override protected
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
context =
this;
expandableListView
= (ExpandableListView) findViewById(R.id.mainList);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width
= metrics.widthPixels;
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
expandableListView.setIndicatorBounds(width
- GetPixelFromDips(50), width -
GetPixelFromDips(10));
} else {
expandableListView.setIndicatorBoundsRelative(width
- GetPixelFromDips(50), width -
GetPixelFromDips(10));
}
addNavigationList();
}
public int GetPixelFromDips(float pixels) {
// Get the screen's density
scale final
float scale = getResources().getDisplayMetrics().density;
// Convert the dps to pixels, based
on density scale return (int) ((scale
* pixels + 0.5f) - 5);
}
public void addNavigationList()
{
ServiceManager.navigationList(getApplicationContext(),
new ServiceResponseListener<NavigationGategoryBaseResponse>()
{
@Override public void onSuccess(NavigationGategoryBaseResponse
response) {
expandableListView.setAdapter(new TestActivity.ParentLevel(context, response.getMainCategories()));
}
@Override public void onFailure(Throwable throwable, String
errorResponse) {
}
}
);
}
public class ParentLevel
extends BaseExpandableListAdapter {
private Context
context;
private List<FirstLevelCategory>
firstLevelCategories;
public ParentLevel(Context
context, List<FirstLevelCategory> firstLevelCategoryList) {
this.context = context;
this.firstLevelCategories = firstLevelCategoryList;
}
@Override public Object
getChild(int arg0, int
arg1) {
return arg1;
}
@Override public
long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@RequiresApi(api
= Build.VERSION_CODES.JELLY_BEAN)
@Override public View
getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
TestActivity.SecondLevelExpandableListView secondLevelELV = new TestActivity.SecondLevelExpandableListView(TestActivity.this);
secondLevelELV.setAdapter(new TestActivity.SecondLevelAdapter(context, firstLevelCategories.get(groupPosition).getSubGrouphs().get(childPosition)));
secondLevelELV.setGroupIndicator(getResources().getDrawable(R.drawable.settings_selector));
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width
= metrics.widthPixels;
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
secondLevelELV.setIndicatorBounds(width
- GetPixelFromDips(50), width -
GetPixelFromDips(10));
} else {
secondLevelELV.setIndicatorBoundsRelative(width - GetPixelFromDips(50), width - GetPixelFromDips(10));
}
return secondLevelELV;
}
@Override public
int getChildrenCount(int groupPosition)
{
return firstLevelCategories.get(groupPosition).getSubGrouphs().size();
}
@Override public Object
getGroup(int groupPosition) {
return groupPosition;
}
@Override public
int getGroupCount() {
return firstLevelCategories.size();
}
@Override public
long getGroupId(int groupPosition) {
return groupPosition;
}
@RequiresApi(api
= Build.VERSION_CODES.JELLY_BEAN)
@Override public View
getGroupView(int groupPosition, final boolean isExpanded, View convertView, ViewGroup
parent) {
if (convertView
== null) {
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView =
inflater.inflate(R.layout.row_first, null);
TextView text = (TextView)
convertView.findViewById(R.id.eventsListEventRowText);
final ImageView
icon = (ImageView) convertView.findViewById(R.id.icon);
String name = firstLevelCategories.get(groupPosition).getCategoryname();
if (name.equals(context.getString(R.string.Fancy))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.fancy));
} else
if (name.equals(context.getString(R.string.Women))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.women));
} else
if (name.equals(context.getString(R.string.Office))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.stationary));
} else
if (name.equals(context.getString(R.string.BooksMore))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.books));
} else
if (name.equals(context.getString(R.string.Men))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.businessman));
} else
if (name.equals(context.getString(R.string.DailyNeeds))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.calendar));
} else
if (name.equals(context.getString(R.string.Garments))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.garments));
} else
if (name.equals(context.getString(R.string.BabyKids))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.babykids));
} else
if (name.equals(context.getString(R.string.Fashion))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.fasion));
} else
if (name.equals(context.getString(R.string.Electronics))) {
icon.setBackground(context.getResources().getDrawable(R.drawable.elctronics));
}
text.setText(name);
}
return convertView;
}
@Override public
boolean hasStableIds() {
return
true;
}
@Override public
boolean isChildSelectable(int groupPosition,
int childPosition) {
return
true;
}
}
public class SecondLevelExpandableListView
extends ExpandableListView {
public SecondLevelExpandableListView(Context
context) {
super(context);
}
protected void
onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
heightMeasureSpec = MeasureSpec.makeMeasureSpec(999999, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec,
heightMeasureSpec);
}
}
public class SecondLevelAdapter
extends BaseExpandableListAdapter {
private Context
context;
private SecondLevelCategory
secondLevelCategories;
public SecondLevelAdapter(Context
context, SecondLevelCategory secondLevelCategories) {
this.context = context;
this.secondLevelCategories = secondLevelCategories;
}
@Override public Object
getGroup(int groupPosition) {
return groupPosition;
}
@Override public
int getGroupCount() {
return 1;
}
@Override public
long getGroupId(int groupPosition) {
return groupPosition;
}
@Override public View getGroupView(int
groupPosition, boolean isExpanded, View
convertView, ViewGroup parent) {
if (convertView
== null) {
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView =
inflater.inflate(R.layout.row_third, null);
TextView text = (TextView)
convertView.findViewById(R.id.eventsListEventRowText);
text.setText(secondLevelCategories.getSubcategoryname());
}
return convertView;
}
@Override public Object
getChild(int groupPosition, int childPosition) {
return childPosition;
}
@Override public
long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override public View
getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
if (convertView
== null) {
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView =
inflater.inflate(R.layout.row_second,
null);
TextView text = (TextView)
convertView.findViewById(R.id.eventsListEventRowText);
text.setText(secondLevelCategories.getThirdLevelCategoryList().get(childPosition).getLowersubcategoryname());
}
return convertView;
}
@Override public
int getChildrenCount(int groupPosition)
{
return secondLevelCategories.getThirdLevelCategoryList().size();
}
@Override public
boolean hasStableIds() {
return
true;
}
@Override public
boolean isChildSelectable(int groupPosition,
int childPosition) {
return
true;
}
}
}
main.Xml:
<?xml
version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_test"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="zaihuishou.com.expandablerecyclerview.TestActivity"><ExpandableListViewandroid:id="@+id/mainList"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffffff"android:groupIndicator="@drawable/settings_selector"android:transcriptMode="alwaysScroll"></ExpandableListView></RelativeLayout>
rowfirst.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="100dp"android:orientation="horizontal"android:padding="10dp"><ImageViewandroid:id="@+id/icon"android:layout_width="25dp"android:layout_height="25dp"android:layout_alignParentLeft="true"
/><TextViewandroid:id="@+id/eventsListEventRowText"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_toLeftOf="@+id/plus"android:layout_toRightOf="@+id/icon"android:textColor="@android:color/background_dark"android:textSize="15sp"
/></LinearLayout>
rowsecond.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="match_parent"android:orientation="vertical"android:padding="10dp"><TextViewandroid:id="@+id/eventsListEventRowText"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingLeft="20dp"
/></LinearLayout>
rowthird.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="match_parent"android:orientation="vertical"android:padding="10dp"><TextViewandroid:id="@+id/eventsListEventRowText"android:layout_width="match_parent"android:layout_height="wrap_content"
/></LinearLayout>

icon from the toolbar. Android studio installs the app on your AVD and starts it and if everything is fine with your setup and application, it will display following Emulator window: