Kabil
Kabil

Reputation: 96

How to start new activity on expandable list item click event

I created expandable listview in a fragment and it's works fine. However I want to start an activity when expandable listview child item clicked. I've looked for hours trying to find a solution to this but I couldn't find it. Someone please provide code for this problem.

import android.R.color;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.TextView;
import android.widget.Toast;

        // This is a listfragment class
        public class Categories extends Fragment {

            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                View v = inflater.inflate(R.layout.categories, null);
                ExpandableListView elv = (ExpandableListView) v.findViewById(R.id.expandableListView1);
                elv.setAdapter(new SavedTabsListAdapter());
                return v;
            }

            public class SavedTabsListAdapter extends BaseExpandableListAdapter {

                private String[] groups = { "g1", "g2"};

                private String[][] children = {
                    { "c1", "2},
                    { "1", "2"}
                };

                @Override
                public int getGroupCount() {
                    return groups.length;
                }

                @Override
                public int getChildrenCount(int i) {
                    return children[i].length;
                }

                @Override
                public Object getGroup(int i) {
                    return groups[i];
                }

                @Override
                public Object getChild(int i, int i1) {
                    return children[i][i1];
                }

                @Override
                public long getGroupId(int i) {
                    return i;
                }

                @Override
                public long getChildId(int i, int i1) {
                    return i1;
                }

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

                @Override
                public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
                    TextView textView = new TextView(CategoriesFragment.this.getActivity());
                    textView.setText(getGroup(i).toString());
                    return textView;
                }

                @Override
                public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
                    TextView textView = new TextView(CategoriesFragment.this.getActivity());
                    textView.setText(getChild(i, i1).toString());
                    return textView;
                }

                @Override
                public boolean isChildSelectable(int i, int i1) {
                    return true;
                }

            }



        }

Upvotes: 0

Views: 1407

Answers (1)

Lionel Port
Lionel Port

Reputation: 3542

Implement the ExpandableListView.OnGroupClickListener and ExpandableListView.OnChildClickListener interfaces in your fragment

e.g.

public class Categories extends Fragment implements ExpandableListView.OnGroupClickListener, ExpandableListView.OnChildClickListener {
    public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id {
    ...
    }

    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
    ...
    }
}

Then in your onCreateView method add the fragment as a listener.

elv.setOnGroupClickListener(this);
elv.setOnChildClickListener(this);

Upvotes: 1

Related Questions