Navjot.jassal
Navjot.jassal

Reputation: 779

How to open a specific tab in viewpager from click on Expandable list child item?

I am using Expandable list in which when i click on child list item open a Viewpager with selected first tab, but i want to open a specific Tab or fragment in viewpager that i clicked. Suppose i clicked on "Mobile Development" i want to open Mobile development Tab in viewpager.here is my code: Expandable listiview:-

public class Services_fragment extends Fragment {

ExpandableListAdapter listAdapter;
ExpandableListView expListView;
List<String> listDataHeader;
HashMap<String, List<String>> listDataChild;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.services_fragment, container, false);
    ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Services");

    expListView = (ExpandableListView) view.findViewById(R.id.service_listview);

    prepareListData();

    listAdapter = new ExpandableListAdapter(getActivity(), listDataHeader, listDataChild);


    expListView.setAdapter(listAdapter);

    expListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
        @Override
        public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
            Toast.makeText(
                    getActivity(),
                    listDataHeader.get(groupPosition)
                            + " : "
                            + listDataChild.get(
                            listDataHeader.get(groupPosition)).get(
                            childPosition), Toast.LENGTH_SHORT)
                    .show();

            if (groupPosition == 0) {
                Container_Activity.showFragment(new Development_fragment_viewpager(), "");
            } else if (groupPosition == 1) {
                Container_Activity.showFragment(new Designing_fragment_viewpager(), "");
            } else if (groupPosition == 2) {
                Container_Activity.showFragment(new Seo_fragment_viewpager(), "");
            }
            return false;
        }
    });

    expListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
        @Override
        public void onGroupExpand(int groupPosition) {

            Toast.makeText(getActivity(),
                    listDataHeader.get(groupPosition) + " Expanded",
                    Toast.LENGTH_SHORT).show();


        }
    });
    return view;
}

private void prepareListData() {
    listDataHeader = new ArrayList<String>();
    listDataChild = new HashMap<String, List<String>>();


    listDataHeader.add("Development");
    listDataHeader.add("Designing");
    listDataHeader.add("SEO & SEM");


    List<String> development = new ArrayList<String>();
    development.add("Web Development");
    development.add("Mobile Development");
    development.add("Software Development");


    List<String> designing = new ArrayList<String>();
    designing.add("Logo");
    designing.add("Brochure");
    designing.add("Catalog");
    designing.add("Other 3D Design");

    List<String> seosem = new ArrayList<String>();
    seosem.add("SEO");
    seosem.add("SMM");


    listDataChild.put(listDataHeader.get(0), development); // Header, Child data
    listDataChild.put(listDataHeader.get(1), designing);
    listDataChild.put(listDataHeader.get(2), seosem);
}

}

ViewPager code:-

public class Development_fragment_viewpager extends Fragment {

TabLayout tabLayout;
ViewPager viewPager;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    final View view=inflater.inflate(R.layout.development_fragment_viewpager,container,false);

    tabLayout= (TabLayout) view.findViewById(R.id.tabLayout_development);
    tabLayout.setupWithViewPager(viewPager);

    tabLayout.addTab(tabLayout.newTab().setText("Web Development"));
    tabLayout.addTab(tabLayout.newTab().setText("Mobile Development"));
    tabLayout.addTab(tabLayout.newTab().setText(" Software Development"));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);


    viewPager= (ViewPager) view.findViewById(R.id.development_pager);

    Development_Adapter adapter = new Development_Adapter(getChildFragmentManager(), tabLayout.getTabCount());

    viewPager.setAdapter(adapter);

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {

            viewPager.setCurrentItem(tab.getPosition());

        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });

    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

    return view;
}

}

Adapter Class:-

public class Development_Adapter extends FragmentStatePagerAdapter {

int TabCount;
public Development_Adapter(FragmentManager fm,int TabCount) {
    super(fm);
    this.TabCount=TabCount;
}

@Override
public Fragment getItem(int position) {

    switch (position){

        case 0:
            Web_development_fragment web_development_fragment=new Web_development_fragment();
        return web_development_fragment;

        case 1:
            Mobileapplication_fragment mobileapplication_fragment=new Mobileapplication_fragment();
            return mobileapplication_fragment;
        case 2:
            Software_development software_development=new Software_development();
            return software_development;
        default:
        return null;
    }

}

@Override
public int getCount() {
    return TabCount;
}

}

Upvotes: 0

Views: 1404

Answers (1)

pankaj yadav
pankaj yadav

Reputation: 424

You can Set Arguments in Fragments and get the data in Fragment

Fragment fragment=new new Development_fragment_viewpager();
Bundle bundle1=new Bundle();
bundle.putInt("PagePosition",2);
fragment.setArguments(bundle1);
Container_Activity.showFragment(fragment,"");

and now in you Fragment override oncreate Method

int pageno=0;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle bundle=getArguments();
    if (bundle!=null){
        pageno=bundle.getInt("PagePosition");
    }
}

and now in your onCrateView just call a method

viewPager.setCurrentItem(pageno, false);

and its done

Upvotes: 0

Related Questions