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

public void onItemClick(int position, view v) {
        RestaurantList_Item row_object = adapter.getItem(position); 
        Intent i = new Intent(context, Restaurant.class);
        i.putExtra(Common.Data_Object, row_object);
        startActivity(i);

    }

3. Replace code of Restaurant class

public class Restaurant extends AppCompatActivity {

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

    @Override
    protected void onCreate(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);

    }

    private void getIntentData(Intent i) {
        if (i != null) {

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

    private void setupViewPager(ViewPager viewPager){
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

        Fragment f = new details();
        Bundle arguments = new Bundle();
        arguments.putParcelable(Common.Data_Object, row_object);
        f.setArguments(arguments);

        adapter.addFragment(f, "Details");
        adapter.addFragment(new menu(), "Menu");
        adapter.addFragment(new tableBooking(), "Table booking");
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter{

        private final List<Fragment> fragmentList = new ArrayList<>();
        private final List<String> fragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager){
            super(manager);
        }

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

        @Override
        public int getCount() {
            return fragmentList.size();
        }

        public void addFragment (Fragment fragment, String title){
            fragmentList.add(fragment);
            fragmentTitleList.add(title);
        }

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

4. get object from bundle in Detail fragment

private void getIntentData(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.

 public class RestaurantModel implements Serializable{
   ...
 }

Add data:-

   Bundle bundle = new Bundle();
   bundle.putSerializable("restaurant", restaurant);
   Fragment1 frag1 = new Fragment1();
   frag1.setArguments(bundle);

Get data :-

RestauranModel restaurant = (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"