Call an activity method from a fragment

前端 未结 14 788
广开言路
广开言路 2020-11-22 09:08

Trying to call a method in my activity from a fragment. I want the fragment to give the method data and to get the data when the method return. I want to achieve similar to

14条回答
  •  时光取名叫无心
    2020-11-22 09:35

    For accessing a function declared in your Activity via your fragment please use an interface, as shown in the answer by marco.

    For accessing a function declared in your Fragment via your activity you can use this if you don't have a tag or an id

    private void setupViewPager(ViewPager viewPager) {
        //fragmentOne,fragmentTwo and fragmentThree are all global variables
        fragmentOne= new FragmentOne();
        fragmentTwo= new FragmentTwo();
        fragmentThree = new FragmentThree();
    
        viewPagerAdapteradapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPagerAdapteradapter.addFragment(fragmentOne, "Frag1");
        viewPagerAdapteradapter.addFragment(fragmentTwo, "Frag2");
        viewPagerAdapteradapter.addFragment(fragmentThree, "Frag3");
    
        //viewPager has to be instantiated when you create the activity:
        //ViewPager viewPager = (ViewPager)findViewById(R.id.pager);
        //setupViewPager(viewPager);
        //Where R.id.pager is the id of the viewPager defined in your activity's xml page.
    
        viewPager.setAdapter(viewPagerAdapteradapter);
    
    
        //frag1 and frag2 are also global variables
        frag1 = (FragmentOne)viewPagerAdapteradapter.mFragmentList.get(0);
        frag2 = (FragmentTwo)viewPagerAdapteradapter.mFragmentList.get(1);;
    
    
        //You can use the variable fragmentOne or frag1 to access functions declared in FragmentOne
    
    
    }
    

    This is the ViewpagerAdapterClass

        class ViewPagerAdapter extends FragmentPagerAdapter {
        public final List mFragmentList = new ArrayList<>();
        private final List mFragmentTitleList = new ArrayList<>();
    
        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }
    
        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }
    
        @Override
        public int getCount() {
            return mFragmentList.size();
        }
    
        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }
    
        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
    

    This answer is for noobs like me. Have a good day.

提交回复
热议问题