I have an ExpandebleListView as a menu in a navigationDrawer, I need to add event listenes to the child items, however I do exercise for each parent and child group, in the parent groups you can get the position with setOnGroupClickListener for children groups I used setOnChildClickListener , and with a Toast.makeText it shows me the null position, this I think is because the child group is related to a > HashMap but at the same time listHash is an object of type ElementoMenu a class from which it receives the parameters to load its images and texts and in this method the which would throw the listHash.get (childPosition) position, an integer data is displayed. I appreciate any help, then the code.
ExpandableListAdapter:
public class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context context;
private List<String> listDataHeader;
private HashMap<String,List<ElementoMenu>> listElementosMenu;
public ExpandableListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<ElementoMenu>> listElementosMenu) {
this.context = context;
this.listDataHeader = listDataHeader;
this.listElementosMenu = listElementosMenu;
}
@Override
public int getGroupCount() {
return listDataHeader.size();
}
@Override
public int getChildrenCount(int i) {
return listElementosMenu.get(listDataHeader.get(i)).size();
}
@Override
public Object getGroup(int i) {
return listDataHeader.get(i);
}
@Override
public Object getChild(int i, int i1) {
return listElementosMenu.get(listDataHeader.get(i)).get(i1);// i= Group item, i1 = childItem
}
@Override
public long getGroupId(int i) {
return i;
}
@Override
public long getChildId(int i, int i1) {
return i1;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
String headerTittle = (String)getGroup(i);
if(view == null){
LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.list_categoria,null);
}
TextView item_cate_name = (TextView)view.findViewById(R.id.list_item_cate_name);
item_cate_name.setTypeface(null, Typeface.BOLD);
item_cate_name.setText(headerTittle);
return view;
}
@Override
public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
//Obtiene titulo.
final String childText = listElementosMenu.get(listDataHeader.get(i)).get(i1).getTitulo();
//Obtiene Imagen.
final int childImg = listElementosMenu.get(listDataHeader.get(i)).get(i1).getImagenResource();
if(view == null){
LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.list_subcategoria,null);
}
TextView item_name = (TextView)view.findViewById(R.id.list_item_name);
item_name.setText(childText);
ImageView item_icon = (ImageView)view.findViewById(R.id.list_item_scate_icon);
item_icon.setImageResource(childImg);
return view;
}
@Override
public boolean isChildSelectable(int i, int i1) {
return true;//*
}
}
ElementoMenu:
public class ElementoMenu {
private String titulo;
private int imagenResource;
public ElementoMenu(String titulo, int imagenResource){
this.titulo = titulo;
this.imagenResource = imagenResource;
}
public int getImagenResource() {
return imagenResource;
}
public void setImagenResource(int imagenResource) {
this.imagenResource = imagenResource;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
}
MainActivity:
public class MainActivity extends AppCompatActivity {
//ExpandableListView
private ExpandableListView listView;
private ExpandableListAdapter listAdapter;
private List<String> listDataHeader;
private HashMap<String,List<ElementoMenu>> listHash;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
//ListView
listView = (ExpandableListView)findViewById(R.id.ex_lits_menu);
initData();
listAdapter = new ExpandableListAdapter(this, listDataHeader,listHash);
listView.setAdapter(listAdapter);//*
//Tutorial: https://www.youtube.com/watch?v=oPGdPQvqPVM
// Evento Grupo expandido
listView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
Toast.makeText(MainActivity.this, listDataHeader.get(groupPosition)+" was expanded", Toast.LENGTH_SHORT).show();
return false;
}
});
//Evento Grupo Contraido
listView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {
@Override
public void onGroupCollapse(int groupPosition) {
Toast.makeText(MainActivity.this, listDataHeader.get(groupPosition)+" was collapsed", Toast.LENGTH_SHORT).show();
}
});
//Evento Child Item
listView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
Toast.makeText(MainActivity.this, listDataHeader.get(groupPosition)+" was expanded", Toast.LENGTH_SHORT).show();
//Integer in=(Integer)listHash;
//int num = Integer.parseInt(String.valueOf(listHash));
Toast.makeText(MainActivity.this, listHash.get(childPosition)+" was clicked", Toast.LENGTH_SHORT).show();
return false;
}
});
}
//Cargue ListView
private void initData() {
listDataHeader = new ArrayList<>();
listHash = new HashMap<>();
listDataHeader.add("Portal");
listDataHeader.add("Plataformas");
listDataHeader.add("Redes Sociales");
listDataHeader.add("Entretenimiento");
List<ElementoMenu> itemMenus1 = new ArrayList<>();
ElementoMenu elemento = new ElementoMenu("Home", R.drawable.img1);
itemMenus1.add(elemento);
elemento = new ElementoMenu("Biblioteca", R.drawable.img2);
itemMenus1.add(elemento);
elemento = new ElementoMenu("EduVirtual", R.drawable.img3);
itemMenus1.add(elemento);
elemento = new ElementoMenu("Directorio", R.drawable.img4);
itemMenus1.add(elemento);
elemento = new ElementoMenu("Preguntas", R.drawable.img1);
itemMenus1.add(elemento);
List<ElementoMenu> itemMenus2 = new ArrayList<>();
elemento = new ElementoMenu("Siga", R.drawable.img1);
itemMenus2.add(elemento);
elemento = new ElementoMenu("Apoyo a la Presencialidad", R.drawable.img2);
itemMenus2.add(elemento);
elemento = new ElementoMenu("Virtualidad", R.drawable.img3);
itemMenus2.add(elemento);
List<ElementoMenu> itemMenus3 = new ArrayList<>();
elemento = new ElementoMenu("Youtube", R.drawable.img1);
itemMenus3.add(elemento);
elemento = new ElementoMenu("Twitter", R.drawable.img2);
itemMenus3.add(elemento);
elemento = new ElementoMenu("Facebook", R.drawable.img3);
itemMenus3.add(elemento);
elemento = new ElementoMenu("Flicker", R.drawable.img4);
itemMenus3.add(elemento);
elemento = new ElementoMenu("Google +", R.drawable.img1);
itemMenus3.add(elemento);
elemento = new ElementoMenu("Instagram", R.drawable.img2);
itemMenus3.add(elemento);
elemento = new ElementoMenu("LinkedIn", R.drawable.img3);
itemMenus3.add(elemento);
List<ElementoMenu> itemMenus4 = new ArrayList<>();
elemento = new ElementoMenu("Tour 360", R.drawable.img1);
itemMenus4.add(elemento);
elemento = new ElementoMenu("Juegos", R.drawable.img2);
itemMenus4.add(elemento);
listHash.put(listDataHeader.get(0),itemMenus1);
listHash.put(listDataHeader.get(1),itemMenus2);
listHash.put(listDataHeader.get(2),itemMenus3);
listHash.put(listDataHeader.get(3),itemMenus4);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}