Skip to content Skip to sidebar Skip to footer

Sending Data From Activity To Fragment Using Set Methods

I've posted a question regarding of passing data from activity to a fragment. And I've learnt that implementing Parcelable to a POJO class is a right way of doing it. After some re

Solution 1:

Ok so from as far as i understand you can do following things

1 Add this method in Adapter

public RestaurantList_Item getItem(int pos) {
    return items.get(pos);
}

2. Homepage is your clicklistner activity (Hope so) in it

publicvoidonItemClick(int position, view v) {
        RestaurantList_Itemrow_object= adapter.getItem(position); 
        Intenti=newIntent(context, Restaurant.class);
        i.putExtra(Common.Data_Object, row_object);
        startActivity(i);

    }

3. Replace code of Restaurant class

publicclassRestaurantextendsAppCompatActivity {

    private TabLayout tabLayout;
    private ViewPager viewPager;
    private RestaurantList_Item row_object;

    @OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_restaurant);

        getIntentData(getIntent());

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

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

    }

    privatevoidgetIntentData(Intent i) {
        if (i != null) {

            row_object = i.getParcelableExtra(Common.Data_Object);
        }
    }

    privatevoidsetupViewPager(ViewPager viewPager){
        ViewPagerAdapteradapter=newViewPagerAdapter(getSupportFragmentManager());

        Fragmentf=newdetails();
        Bundlearguments=newBundle();
        arguments.putParcelable(Common.Data_Object, row_object);
        f.setArguments(arguments);

        adapter.addFragment(f, "Details");
        adapter.addFragment(newmenu(), "Menu");
        adapter.addFragment(newtableBooking(), "Table booking");
        viewPager.setAdapter(adapter);
    }

    classViewPagerAdapterextendsFragmentPagerAdapter{

        privatefinal List<Fragment> fragmentList = newArrayList<>();
        privatefinal List<String> fragmentTitleList = newArrayList<>();

        publicViewPagerAdapter(FragmentManager manager){
            super(manager);
        }

        @Overridepublic Fragment getItem(int position) {
            return fragmentList.get(position);
        }

        @OverridepublicintgetCount() {
            return fragmentList.size();
        }

        publicvoidaddFragment(Fragment fragment, String title){
            fragmentList.add(fragment);
            fragmentTitleList.add(title);
        }

        @Overridepublic CharSequence getPageTitle(int position) {
            return fragmentTitleList.get(position);
        }
    }
}

4. get object from bundle in Detail fragment

privatevoidgetIntentData(Bundle b)
{
    if (b != null)
    {
         detailObject = b.getParcelable(Common.Data_Object);
    }
}

Hope it will help.

Solution 2:

You can use setArguments() method of the fragment to pass your restaurant model class to new fragment while creating the new instance of it.You can get it back using getArguments() in newly created fragment's onCreate() method. You have to make your resturantModel.java class Serializable.

publicclassRestaurantModelimplementsSerializable{
   ...
 }

Add data:-

Bundlebundle=newBundle();
   bundle.putSerializable("restaurant", restaurant);
   Fragment1frag1=newFragment1();
   frag1.setArguments(bundle);

Get data :-

RestauranModelrestaurant= (RestauranModel) getArguments().getSerializable("restaurant");

FYI: Difference between Parcelable and Serializable : https://stackoverflow.com/a/3323554/4690731

Post a Comment for "Sending Data From Activity To Fragment Using Set Methods"