Postingan lainnya
Buku Ini Koding!
Baru!
Buku ini akan jadi teman perjalanan kamu belajar sampai dapat kerjaan di dunia programming!
Child dengan expandablelistview tidak sesuai
saya sudah beberapa kali membuat menu dengan ExpandableListView, namun tidak sesuai dengan harapan :
Kondisi 1 : jumlah Group = 2 jumlah masing-masing Child = 3 Hasil = Child tidak tampil semua, tapi cuma 2 child yang tampil dari masing-masing group
Kondisi 2 : jumlah Group = 3 jumlah Child pada Group 1 = 2 jumlah Child pada Group 2 = 3 jumlah Child pada Group 3 = 3 Hasil : ketika di klik Group 1, langsung keluar sendiri aplikasinya
Harapan Saya bisa membuat menu dengan struktur seperti berikut (misal) : Binatang -- kucing -- anjing -- burung Pemrograman -- java -- android -- php -- c# -- basic -- css -- html Elektronik -- TV -- Speaker
mohon bantuannya atau link mengenai atau koreksinya hal tersebut.
source code saya lampirkan
6 Jawaban:
MainActivity.java
<pre> package com.project.ardi.ebpkd;
import android.app.ProgressDialog; import android.content.res.Configuration; import android.support.annotation.Nullable; import android.support.v4.app.FragmentTransaction; 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.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View;
import android.widget.ExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.RadioButton;
import com.project.ardi.ebpkd.Adapter.CustomExpandableListAdapter; import com.project.ardi.ebpkd.Fragments.Fragments_PBB.ViewPenetapanPBBFragment; import com.project.ardi.ebpkd.Fragments.HomeFragment; import com.project.ardi.ebpkd.GlobalVar.GlobalKonstanta; import com.project.ardi.ebpkd.Helper.FragmentNavigationManager; import com.project.ardi.ebpkd.Interface.NavigationManager;
import java.util.ArrayList;
import java.util.HashMap; import java.util.List;
public class MainActivity extends AppCompatActivity {
private DrawerLayout mdDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
private String mActivityTitle;
private ExpandableListView expandableListView;
private ExpandableListAdapter adapter;
private List&lt;String&gt; lstTitle; //group
private HashMap&lt;String, List&lt;String&gt;&gt; lstChild;
private NavigationManager navigationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mdDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
mActivityTitle = getTitle().toString();
expandableListView = (ExpandableListView)findViewById(R.id.navList);
navigationManager = FragmentNavigationManager.getmInstance(this);
View listHeaderView = getLayoutInflater().inflate(R.layout.nav_header, null, false);
expandableListView.addHeaderView(listHeaderView);
initItems();
addDrawersItem();
setupDrawer();
if(savedInstanceState == null){
selectFirstItemAsDefault();
}
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setTitle(GlobalKonstanta.title_app);
}
@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
private void FirstLoadFragment(){
HomeFragment fragment = new HomeFragment();
loadFragmentBaru(fragment);
}
private void selectFirstItemAsDefault() {
if(navigationManager != null)
{
String firstItem = lstTitle.get(0);
navigationManager.showFragment(firstItem);
getSupportActionBar().setTitle(firstItem);
}
}
private void setupDrawer() {
mDrawerToggle = new ActionBarDrawerToggle(this, mdDrawerLayout, R.string.open, R.string.close){
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
invalidateOptionsMenu();
}
};
mDrawerToggle.setDrawerIndicatorEnabled(true);
mdDrawerLayout.setDrawerListener(mDrawerToggle);
}
private void addDrawersItem() {
adapter = new CustomExpandableListAdapter(this, lstTitle, lstChild);
expandableListView.setAdapter(adapter);
expandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
getSupportActionBar().setTitle(lstTitle.get(groupPosition).toString());
}
});
expandableListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {
@Override
public void onGroupCollapse(int groupPosition) {
getSupportActionBar().setTitle(GlobalKonstanta.title_app);
}
});
expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
String selectedItem = ((List)(lstChild.get(lstTitle.get(groupPosition)))).get(childPosition).toString();
getSupportActionBar().setTitle(selectedItem);
if(groupPosition&lt;lstTitle.size()){
if(groupPosition==0){
if(childPosition==0){
navigationManager.showFragment(selectedItem);
} else{
navigationManager.showFragment(selectedItem);
}
}else if (groupPosition==1) {
if (childPosition == 0) {
ViewPenetapanPBBFragment fragment = new ViewPenetapanPBBFragment();
loadFragmentBaru(fragment);
} else {
navigationManager.showFragment(selectedItem);
}
}
else{
navigationManager.showFragment(selectedItem);
}
}else{
throw new IllegalArgumentException("Tidak didukung fragment");
}
mdDrawerLayout.closeDrawer(GravityCompat.START);
return false;
}
});
}
private void loadFragmentBaru(android.support.v4.app.Fragment fg){
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.container ,fg);
fragmentTransaction.commit();
}
private void initItems() {
lstTitle = new ArrayList&lt;&gt;();
lstChild = new HashMap&lt;String,List&lt;String&gt;&gt;();
lstTitle.add("Group1");
lstTitle.add("PBB-P2");
List&lt;String&gt; list1 = new ArrayList&lt;&gt;();
list1.add("Child_1_FromGroup1");
list1.add("Child_2_FromGroup1");
List&lt;String&gt; list2 = new ArrayList&lt;&gt;();
list2.add("Cari");
list2.add("Test");
lstChild.put(lstTitle.get(0), list1);
lstChild.put(lstTitle.get(1), list2);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(mDrawerToggle.onOptionsItemSelected(item))
return true;
return super.onOptionsItemSelected(item);
}
}
</pre>
activity_main.xml
<pre> <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns: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" tools:context=".MainActivity">
&lt;LinearLayout
android:orientation="vertical"
android:id="@+id/activity_controller"
android:layout_width="match_parent"
android:layout_height="match_parent"&gt;
&lt;FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"&gt;&lt;/FrameLayout&gt;
&lt;/LinearLayout&gt;
&lt;ExpandableListView
android:id="@+id/navList"
android:layout_width="235dp"
android:layout_height="match_parent"
android:layout_gravity="left|start"
android:background="@android:color/background_light"
android:divider="@color/dividerColor"
android:dividerHeight="0.5dp"
android:indicatorLeft="?android:attr/expandableListPreferredItemIndicatorLeft"&gt;&lt;/ExpandableListView&gt;
</android.support.v4.widget.DrawerLayout> </pre>
nav_header.xml
<pre> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/main_header_selector" >
&lt;LinearLayout
android:orientation="horizontal"
android:weightSum="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
&gt;
&lt;ImageView
android:id="@+id/avatar"
android:src="@drawable/ic_account_circle_white_24dp"
android:layout_width="70dp"
android:layout_height="70dp" /&gt;
&lt;TextView
android:id="@+id/balance"
android:gravity="right|end"
android:layout_weight="1"
android:paddingTop="10dp"
android:text="Balance : 1000"
android:textColor="@android:color/white"
android:textSize="16dp"
android:layout_width="0dp"
android:layout_height="wrap_content" /&gt;
&lt;/LinearLayout&gt;
&lt;TextView
android:id="@+id/name"
android:layout_weight="1"
android:paddingLeft="10dp"
android:layout_marginBottom="10dp"
android:gravity="left|start"
android:text="ARDINAL"
android:textColor="@android:color/white"
android:textSize="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /&gt;
</LinearLayout> </pre>
CustomExpandableListAdapter.java
<pre> package com.project.ardi.ebpkd.Adapter;
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;
import com.project.ardi.ebpkd.R;
import java.util.HashMap; import java.util.List;
public class CustomExpandableListAdapter extends BaseExpandableListAdapter {
private Context context;
private List&lt;String&gt; listTitle;
private HashMap&lt;String, List&lt;String&gt;&gt; listItem;
public CustomExpandableListAdapter(Context context, List&lt;String&gt; listTitle, HashMap&lt;String, List&lt;String&gt;&gt; listItem) {
this.context = context;
this.listTitle = listTitle;
this.listItem = listItem;
System.out.println("CustomExpandableListAdapter listTitle size : "+this.listTitle.size());
System.out.println("CustomExpandableListAdapter listItem size : "+this.listItem.size());
}
@Override
public int getGroupCount() {
return listTitle.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return listItem.size();
}
@Override
public Object getGroup(int groupPosition) {
return listTitle.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return listItem.get(listTitle.get(groupPosition)).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
String title = (String)getGroup(groupPosition);
if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.list_group, null);
}
TextView txtTitle = (TextView)convertView.findViewById(R.id.listTitle);
txtTitle.setTypeface(null, Typeface.BOLD);
txtTitle.setText(title);
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
String title = (String)getChild(groupPosition,childPosition);
if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.list_item, null);
}
TextView txtChild = (TextView)convertView.findViewById(R.id.expandabledListItem);
txtChild.setText(title);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
</pre>
list_group.xml
<pre> <?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="horizontal" >
&lt;TextView
android:id="@+id/listTitle"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textColor="@color/list_group_title"
/&gt;
</LinearLayout> </pre>
list_item.xml
<pre> <?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" >
&lt;TextView
android:id="@+id/expandabledListItem"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
android:paddingRight="?android:attr/expandableListPreferredItemPaddingLeft"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/list_item_title"
/&gt;
</LinearLayout> </pre>