带有可扩展列表视图的 NavigationDrawer OnchildclickListner 和 OnGroupclickListner 不工作

NavigationDrawer with Expandable listview OnchildclickListner and OnGroupclickListner not working

我在我的代码 OnGroupClickListnerOnchildclickListner 中使用 Listview in NavigationDrawer 中的可扩展 Listview 并且 OnchildclickListner 不工作任何人都可以检查我的代码并检查我是否遗漏了什么, 请建议代码如下:

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;
        }
    }
}

请检查以下代码...它可能对您有所帮助

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;
    }
   }
 }
}