1

J'utilise un Listview extensible à NavigationDrawer dans mon code OnGroupClickListner et OnchildclickListner ne fonctionne pas quelqu'un peut-il passer par mon code et vérifier si je manque quelque chose, S'il vous plaît indiquer le code est ci-dessous:NavigationDrawer avec listview Extensible OnchildclickListner et OnGroupclickListner ne fonctionne pas

import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.AppCompatActivity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.support.v4.widget.DrawerLayout.DrawerListener; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.ExpandableListView.OnChildClickListener; 
import android.widget.ExpandableListView; 
import android.widget.ExpandableListView.OnGroupClickListener; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 
import com.tv.oltranz726app.R; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 


public class SlidingMenuActivity extends AppCompatActivity { 
    private DrawerLayout mDrawerLayout; 
    public ExpandableListView mDrawerList; 
    public ImageView leftIV; 
    public ExpandableListAdapter listAdapter; 
    HashMap<String, List<String>> listDataChild; 
    List<String> listDataHeader; 

    private boolean drawerOpen = false; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.drawer_layout); 
     leftIV = (ImageView) findViewById(R.id.leftIV); 
     leftIV.setImageResource(R.drawable.manu); 
     leftIV.setOnClickListener(homeOnclickListener); 
     setUpDrawer(); 





    } 



    private void setUpDrawer() { 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerLayout.setScrimColor(getResources().getColor(
       android.R.color.transparent)); 
     mDrawerLayout.setDrawerListener(mDrawerListener); 
     mDrawerList = (ExpandableListView) findViewById(R.id.list_slidermenu); 

     prepareListData(); 
     listAdapter = new ExpandableListAdapter(this, listDataHeader, 
       listDataChild); 
     // setting list adapter 
     mDrawerList.setAdapter(listAdapter); 
     mDrawerList.setDivider(null); 
     mDrawerList.expandGroup(0); 

//  mDrawerLayout.closeDrawer(mDrawerList); 

     mDrawerList.setOnChildClickListener(new OnChildClickListener() { 
      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, 
             int groupPosition, int childPosition, long id) { 

       Toast.makeText(SlidingMenuActivity.this,"Bus Ticket",Toast.LENGTH_SHORT).show(); 
       switch (groupPosition) { 

        case 0: 

         switch (childPosition) { 

          case 0: 
           Toast.makeText(SlidingMenuActivity.this,"Bus Ticket",Toast.LENGTH_SHORT).show(); 
           break; 
          case 1: 
           Toast.makeText(SlidingMenuActivity.this,"Flight Ticket",Toast.LENGTH_SHORT).show(); 
           break; 

          case 2: 
           Toast.makeText(SlidingMenuActivity.this,"Electricity",Toast.LENGTH_SHORT).show(); 
           break; 
          case 3: 
           Toast.makeText(SlidingMenuActivity.this,"Water",Toast.LENGTH_SHORT).show(); 
           break; 


         } 
         break; 


        default: 
         break; 

       } 


       return false; 
      } 
     }); 


     mDrawerList.setOnGroupClickListener(new OnGroupClickListener() { 
      @Override 
      public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { 


       Toast.makeText(getApplicationContext(), "OFFere ", Toast.LENGTH_SHORT).show(); 
       System.out.println("Here we go"); 

       switch (groupPosition) { 




        case 1: 
         Toast.makeText(getApplicationContext(), "OFFere ", Toast.LENGTH_SHORT).show(); 
         /* Intent intent = new Intent(MainActivity.this, Secondactivity.class); 
         startActivity(intent);*/ 

         break; 

        case 2: 

         Toast.makeText(getApplicationContext(), "Accounts ", Toast.LENGTH_SHORT).show(); 
         break; 

        case 3: 

         Toast.makeText(getApplicationContext(), "Settings ", Toast.LENGTH_SHORT).show(); 

         break; 

        case 4: 
         Toast.makeText(getApplicationContext(),"Help",Toast.LENGTH_SHORT).show(); 
         break; 

        default: 
         break; 

       } 
       return false; 
      } 
     }); 
    } 



    View.OnClickListener homeOnclickListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (mDrawerLayout.isDrawerOpen(mDrawerList)) { 
       mDrawerLayout.closeDrawer(mDrawerList); 
      } else { 
       mDrawerLayout.openDrawer(mDrawerList); 
      } 
     } 
    }; 



    private AdapterView.OnItemClickListener mDrawerItemClickedListener = new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
           long arg3) { 

     } 
    }; 

    // Catch the events related to the drawer to arrange views according to this 
    // action if necessary... 
    private DrawerListener mDrawerListener = new DrawerListener() { 

     @Override 
     public void onDrawerStateChanged(int status) { 

     } 

     @Override 
     public void onDrawerSlide(View view, float slideArg) { 

     } 

     @Override 
     public void onDrawerOpened(View view) { 
     } 

     @Override 
     public void onDrawerClosed(View view) { 
     } 
    }; 
    private void prepareListData() { 
     listDataHeader = new ArrayList<String>(); 
     listDataChild = new HashMap<String, List<String>>(); 

     // Adding child data 
     listDataHeader.add("SERVICES"); 
     listDataHeader.add("Offers"); 
     listDataHeader.add("Accounts"); 
     listDataHeader.add("Settings"); 
     listDataHeader.add("Help"); 

     // Adding child data 
     List<String> services = new ArrayList<String>(); 
     services.add("BUS TICKETS"); 
     services.add("FLIGHT TICKETS"); 
     services.add("ELECTRICITY"); 
     services.add("WATER"); 

     List<String> offers = new ArrayList<String>(); 
     List<String> accounts = new ArrayList<String>(); 
     List<String> settings = new ArrayList<String>(); 
     List<String> helps = new ArrayList<String>(); 


     listDataChild.put(listDataHeader.get(0), services); // Header, Child data 
     listDataChild.put(listDataHeader.get(1), offers); 
     listDataChild.put(listDataHeader.get(2), accounts); 
     listDataChild.put(listDataHeader.get(3), settings); 
     listDataChild.put(listDataHeader.get(4), helps); 
    } 


    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.drawerchilditem, null); 
      } 

      TextView txtListChild = (TextView) convertView 
        .findViewById(R.id.childtext); 

      txtListChild.setText(childText); 


      if(groupPosition==0) 
      { 
       txtListChild.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 

         Toast.makeText(_context,"I clickedf====>>>"+childPosition,Toast.LENGTH_SHORT).show(); 

        } 
       }); 
      } 

      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.drawer_list_item, null); 
      } 

      TextView lblListHeader = (TextView) convertView 
        .findViewById(R.id.title); 
      lblListHeader.setText(headerTitle); 


      return convertView; 
     } 

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

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

tu ne peux pas le faire dans '' getChildView' et getGroupView' en utilisant 'convertView.setOnClickListene r() ' – Pankaj

+0

Pourquoi utiliser la vue Liste extensible dans le tiroir de navigation? Vous pouvez utiliser la vue de navigation. En cela, vous pouvez mettre un menu. comme: http://antonioleiva.com/navigation-view/ –

+0

Ne fonctionne pas Clairvoyant –

Répondre

1

S'il vous plaît vérifier le code ci-dessous ... Il peut être utile pour vous

public class SlidingMenuActivity extends AppCompatActivity { 
private DrawerLayout mDrawerLayout; 
public ExpandableListView mDrawerList; 
public ImageView leftIV; 
public ExpandableListAdapter listAdapter; 
HashMap<String, List<String>> listDataChild; 
List<String> listDataHeader; 

private boolean drawerOpen = false; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.drawer_layout); 
    leftIV = (ImageView) findViewById(R.id.leftIV); 
    leftIV.setImageResource(R.drawable.manu); 
    leftIV.setOnClickListener(homeOnclickListener); 
    setUpDrawer(); 


} 



private void setUpDrawer() { 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerLayout.setScrimColor(getResources().getColor(
      android.R.color.transparent)); 
    mDrawerLayout.setDrawerListener(mDrawerListener); 
    mDrawerList = (ExpandableListView) findViewById(R.id.list_slidermenu); 

    prepareListData(); 
    listAdapter = new ExpandableListAdapter(this, listDataHeader, 
      listDataChild); 
    // setting list adapter 
    mDrawerList.setAdapter(listAdapter); 
    mDrawerList.setDivider(null); 
    mDrawerList.expandGroup(0); 



    mDrawerList.setOnChildClickListener(new OnChildClickListener() { 
     @Override 
     public boolean onChildClick(ExpandableListView parent, View v, 
            int groupPosition, int childPosition, long id) { 

      Toast.makeText(SlidingMenuActivity.this,"Bus Ticket",Toast.LENGTH_SHORT).show(); 
      switch (groupPosition) { 

       case 0: 

        switch (childPosition) { 

         case 0: 
          Toast.makeText(SlidingMenuActivity.this,"Bus Ticket",Toast.LENGTH_SHORT).show(); 
          break; 
         case 1: 
          Toast.makeText(SlidingMenuActivity.this,"Flight Ticket",Toast.LENGTH_SHORT).show(); 
          break; 

         case 2: 
          Toast.makeText(SlidingMenuActivity.this,"Electricity",Toast.LENGTH_SHORT).show(); 
          break; 
         case 3: 
          Toast.makeText(SlidingMenuActivity.this,"Water",Toast.LENGTH_SHORT).show(); 
          break; 


        } 
        break; 


       default: 
        break; 

      } 

    mDrawerLayout.closeDrawer(mDrawerList); 
      return false; 
     } 
     }); 


    mDrawerList.setOnGroupClickListener(new OnGroupClickListener() { 
     @Override 
     public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { 


      Toast.makeText(getApplicationContext(), "OFFere ", Toast.LENGTH_SHORT).show(); 
      System.out.println("Here we go"); 

      switch (groupPosition) { 




       case 1: 
        Toast.makeText(getApplicationContext(), "OFFere ", Toast.LENGTH_SHORT).show(); 
        /* Intent intent = new Intent(MainActivity.this, Secondactivity.class); 
        startActivity(intent);*/ 

        break; 

       case 2: 

        Toast.makeText(getApplicationContext(), "Accounts ", Toast.LENGTH_SHORT).show(); 
        break; 

       case 3: 

        Toast.makeText(getApplicationContext(), "Settings ", Toast.LENGTH_SHORT).show(); 

        break; 

       case 4: 
        Toast.makeText(getApplicationContext(),"Help",Toast.LENGTH_SHORT).show(); 
        break; 

       default: 
        break; 

      } 


     mDrawerLayout.closeDrawer(mDrawerList); 
      return false; 
     } 
    }); 
} 



private AdapterView.OnItemClickListener mDrawerItemClickedListener = new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
          long arg3) { 

    } 
}; 

// Catch the events related to the drawer to arrange views according to this 
// action if necessary... 
private DrawerListener mDrawerListener = new DrawerListener() { 

    @Override 
    public void onDrawerStateChanged(int status) { 

    } 

    @Override 
    public void onDrawerSlide(View view, float slideArg) { 

    } 

    @Override 
    public void onDrawerOpened(View view) { 
    } 

    @Override 
    public void onDrawerClosed(View view) { 
    } 
}; 
private void prepareListData() { 
    listDataHeader = new ArrayList<String>(); 
    listDataChild = new HashMap<String, List<String>>(); 

    // Adding child data 
    listDataHeader.add("SERVICES"); 
    listDataHeader.add("Offers"); 
    listDataHeader.add("Accounts"); 
    listDataHeader.add("Settings"); 
    listDataHeader.add("Help"); 

    // Adding child data 
    List<String> services = new ArrayList<String>(); 
    services.add("BUS TICKETS"); 
    services.add("FLIGHT TICKETS"); 
    services.add("ELECTRICITY"); 
    services.add("WATER"); 

    List<String> offers = new ArrayList<String>(); 
    List<String> accounts = new ArrayList<String>(); 
    List<String> settings = new ArrayList<String>(); 
    List<String> helps = new ArrayList<String>(); 


    listDataChild.put(listDataHeader.get(0), services); // Header, Child data 
    listDataChild.put(listDataHeader.get(1), offers); 
    listDataChild.put(listDataHeader.get(2), accounts); 
    listDataChild.put(listDataHeader.get(3), settings); 
    listDataChild.put(listDataHeader.get(4), helps); 
} 


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.drawerchilditem, null); 
     } 

     TextView txtListChild = (TextView) convertView 
       .findViewById(R.id.childtext); 

     txtListChild.setText(childText); 


     if(groupPosition==0) 
     { 
      txtListChild.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        Toast.makeText(_context,"I clickedf====>>>"+childPosition,Toast.LENGTH_SHORT).show(); 

       } 
      }); 
     } 

     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.drawer_list_item, null); 
     } 

     TextView lblListHeader = (TextView) convertView 
       .findViewById(R.id.title); 
     lblListHeader.setText(headerTitle); 


     return convertView; 
    } 

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

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

Merci pour la réponse, il travaille pour moi ... Je pense que j'ai fermé le tiroir sur clic ... Vous avez sauvé ma journée –

+0

@Saurabhsharma. ..Welocome bro ... Heureux d'aider :) –