Here is the Current UI for Side Menu.
Here is the image of an app with DRILL-DOWN
or Expandable ListView
Menu
how to create same menu UI for the first image?
Here is the Current UI for Side Menu.
Here is the image of an app with DRILL-DOWN
or Expandable ListView
Menu
how to create same menu UI for the first image?
Looks like you've posted another similar question, where I've provided several links to tutorials and tips from my work with ExpandableListViews: Sub Menu in App
Please let me know if there is any information you are still unclear on.
I already implementing expandable listview inside navigation drawer. This is full source code for it. check this out:
this is main_activity.java (include ExpandableDrawerAdapter):
public class MainActivity extends Activity {
public DrawerLayout dl;
public ExpandableListView xl;
public ActionBarDrawerToggle adt;
public List<String> alkitab;
public HashMap<String, List<String>> data_alkitab;
public CharSequence title;
private int lastExpandPosition = -1;
private MenuItem menuItem;
private ExpandableDrawerAdapter adapt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadData();
title = getActionBar().getTitle();
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setDisplayShowTitleEnabled(true);
getActionBar().setNavigationMode(ActionBar.DISPLAY_HOME_AS_UP);
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.BLUE));
getActionBar().show();
dl = (DrawerLayout)findViewById(R.id.drawer_layout);
adt = new ActionBarDrawerToggle(this, dl, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close){
public void onDrawerClosed(View view) {
getActionBar().setTitle(title);
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle("Open Drawer");
invalidateOptionsMenu();
}
};
adt.setDrawerIndicatorEnabled(false);
dl.setDrawerListener(adt);
xl = (ExpandableListView)findViewById(R.id.left_drawer);
adapt = new ExpandableDrawerAdapter(this, alkitab, data_alkitab);
xl.setAdapter(adapt);
xl.setTextFilterEnabled(true);
xl.setOnGroupClickListener(new OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
return false;
}
});
xl.setOnGroupExpandListener(new OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
if (lastExpandPosition != -1 && groupPosition != lastExpandPosition) {
xl.collapseGroup(lastExpandPosition);
}
lastExpandPosition = groupPosition;
}
});
xl.setOnGroupCollapseListener(new OnGroupCollapseListener() {
@Override
public void onGroupCollapse(int groupPosition) {}
});
xl.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
int grup_pos = (int)adapt.getGroupId(groupPosition);
int child_pos = (int)adapt.getChildId(groupPosition, childPosition);
if(grup_pos == 1){
switch (child_pos) {
case 0:
Toast.makeText(getApplicationContext(), "Child 1 Group 1", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(getApplicationContext(), "Child 2 Group 1", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(getApplicationContext(), "Child 3 Group 1", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(getApplicationContext(), "Child 4 Group 1", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
return false;
}
});
}
public void loadData(){
alkitab = new ArrayList<String>();
data_alkitab = new HashMap<String, List<String>>();
alkitab.add("Group 1");
alkitab.add("Group 2");
alkitab.add("Group 3");
alkitab.add("Group 4");
List<String> kitab_perjanjian_lama = new ArrayList<String>();
kitab_perjanjian_lama.add("Child 1 Of Group 1");
kitab_perjanjian_lama.add("Child 2 Of Group 1");
kitab_perjanjian_lama.add("Child 3 Of Group 1");
kitab_perjanjian_lama.add("Child 4 Of Group 1");
List<String> kitab_perjanjian_baru = new ArrayList<String>();
kitab_perjanjian_baru.add("Child 1 Of Group 2");
kitab_perjanjian_baru.add("Child 2 Of Group 2");
kitab_perjanjian_baru.add("Child 3 Of Group 2");
kitab_perjanjian_baru.add("Child 4 Of Group 2");
List<String> kidung_jemaat = new ArrayList<String>();
kidung_jemaat.add("Child 1 Of Group 3");
kidung_jemaat.add("Child 2 Of Group 3");
kidung_jemaat.add("Child 3 Of Group 3");
kidung_jemaat.add("Child 4 Of Group 3");
List<String> gita_bakti = new ArrayList<String>();
gita_bakti.add("Child 1 Of Group 4");
gita_bakti.add("Child 2 Of Group 4");
gita_bakti.add("Child 3 Of Group 4");
gita_bakti.add("Child 4 Of Group 4");
data_alkitab.put(alkitab.get(0), kitab_perjanjian_lama);
data_alkitab.put(alkitab.get(1), kitab_perjanjian_baru);
data_alkitab.put(alkitab.get(2), kidung_jemaat);
data_alkitab.put(alkitab.get(3), gita_bakti);
}
@SuppressWarnings("unused")
private void displayViewExpandableListview(int position){
android.app.Fragment frag = null;
switch (position) {
case 0:
Toast.makeText(this, "test 1", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(this, "test 2", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "Test 3", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
if(frag != null){
android.app.FragmentManager frag_mgr = getFragmentManager();
frag_mgr.beginTransaction().replace(R.id.content_frame, frag).commit();
xl.setItemChecked(position, true);
dl.closeDrawer(xl);
} else {
Log.d("Error 1", "Error creating fragment");
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
default:
break;
}
return true;
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
adt.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
adt.onConfigurationChanged(newConfig);
}
public class ExpandableDrawerAdapter extends BaseExpandableListAdapter{
public final Context _context;
public List<String> _alkitab, tempchild;
public HashMap<String, List<String>> _data_alkitab;
public ExpandableDrawerAdapter(Context context, List<String> alkitab, HashMap<String, List<String>> data_alkitab){
this._context = context;
this._alkitab = alkitab;
this._data_alkitab = data_alkitab;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return this._data_alkitab.get(this._alkitab.get(groupPosition)).get(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) {
final String childText = (String)getChild(groupPosition, childPosition);
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_row_data_alkitab, null);
}
TextView a = (TextView)convertView.findViewById(R.id.lblListItem);
a.setText(childText);
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return this._data_alkitab.get(this._alkitab.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return this._alkitab.get(groupPosition);
}
@Override
public int getGroupCount() {
return this._alkitab.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 inflater = (LayoutInflater)this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_row_group, null);
}
if(groupPosition==0){
((ImageView)convertView.findViewById(R.id.image2)).setImageResource(R.drawable.ic_launcher);
((TextView)convertView.findViewById(R.id.text2)).setText("Description below group 1");
}else if(groupPosition==1){
((ImageView)convertView.findViewById(R.id.image2)).setImageResource(R.drawable.ic_launcher);
((TextView)convertView.findViewById(R.id.text2)).setText("Description below group 2");
}else if(groupPosition==2){
((ImageView)convertView.findViewById(R.id.image2)).setImageResource(R.drawable.ic_launcher);
((TextView)convertView.findViewById(R.id.text2)).setText("Description below group 3");
}else if(groupPosition==3){
((ImageView)convertView.findViewById(R.id.image2)).setImageResource(R.drawable.ic_launcher);
((TextView)convertView.findViewById(R.id.text2)).setText("Description below group 4");
}
TextView b = (TextView)convertView.findViewById(R.id.text1);
b.setTypeface(null, Typeface.BOLD);
b.setText(headerTitle);
return convertView;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
}
this is activity_main.xml:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<ExpandableListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="700dp"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/black"
android:dividerHeight="1dp"
android:indicatorRight="440dp"
android:background="#fff"/>
</android.support.v4.widget.DrawerLayout>
this is list_row_data_alkitab.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:background="#ffffff"
android:padding="8dp"
android:focusable="false" >
<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:focusable="false"
android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft" />
</LinearLayout>
and this is list_row_group.xml:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:background="#ffffff"
android:paddingTop="0dip"
android:stretchColumns="1" >
<TableRow>
<ImageView
android:id="@+id/image2"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_marginLeft="10dip" />
<TableLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:paddingTop="0dip"
android:stretchColumns="1" >
<TableRow>
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|center_vertical"
android:layout_marginLeft="10dip"
android:layout_weight="1"
android:textColor="#000000"
android:textSize="17dip"
android:textStyle="bold" />
</TableRow>
<TableRow>
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|center_vertical"
android:layout_marginLeft="10dip"
android:layout_weight="1"
android:textColor="#000000"
android:textSize="14dip" />
</TableRow>
</TableLayout>
</TableRow>
</TableLayout>
and this is the result picture :
Happy Coding Developers :D
It is expandable listview inside a navigation drawer. First create navigation drawer and then add expandable listview in that drawer. Navigation drawer link: http://developer.android.com/design/patterns/navigation-drawer.html expandable listview link: http://www.vogella.com/tutorials/AndroidListView/article.html