blueman3399
blueman3399

Reputation: 207

Passing data from Activity with ViewPager its to Fragments

I researched a lot and found no solution for my case.

This is my Activity:

public class ProfileActivity extends AppCompatActivity {



@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);



        setContentView(R.layout.activity_profile);



        //region FindViews
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        tabLayout = (PagerSlidingTabStrip) findViewById(R.id.tabs);
        //endregion

        //region ViewPager
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        setupViewPager(viewPager);
        viewPager.setOffscreenPageLimit(5);
//        tabLayout.setupWithViewPager(viewPager);
        tabLayout.setViewPager(viewPager);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                switch (position) {
                    case 0:
                        changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_red_primary));
                        break;
                    case 1:
                        changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_yellow_primary));
                        break;
                    case 2:
                        changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_green_primary));
                        break;
                    case 3:
                        changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_blue_primary));
                        break;
                    case 4:
                        changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_black_primary));
                        break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
        //endregion

        extrasForFragment = new Bundle();
        extrasForFragment.putInt("name", 3);

        //region Get Extras from Intent
        extras = getIntent().getExtras();
        if (extras != null) {
            userID = extras.getInt(StaticVariables.INTENT_USERID, -1);
            Log.e("ISER", "dd " + userID);
            OverViewFragment.newInstance().setArguments(extrasForFragment);
        }
        //endregion

        setTitle("");
    }

class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> 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 addFrag(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

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





private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFrag(OverViewFragment.newInstance(), getString(R.string.overview));
        adapter.addFrag(new Fragment2(), getString(R.string.text));
        adapter.addFrag(new Fragment3(), getString(R.string.text));
        adapter.addFrag(new Fragment4(), getString(R.string.text));
        adapter.addFrag(new Fragment5(), getString(R.string.text));
        viewPager.setAdapter(adapter);
    }
}

But it won't work.. THis is my fragment:

public class OverViewFragment extends Fragment {
 public static OverViewFragment newInstance() {
        return new OverViewFragment();
    }
 @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Bundle b = getArguments();
        if (b != null) {
            Log.e("EXTRAS", "sind: " + b.toString() + " und: " + b.getInt("name", 0));
        } else {
            Log.e("FAIL", "...");
        }
        return inflater.inflate(R.layout.fragment_recyclerview, container, false);
    }
}

But it didn't work. I tried this: Send data from activity to fragment in android and this: Passing value between activity to fragment on android But nothing want to work.. I hope for solutions. Thanks for any help!

Upvotes: 2

Views: 4643

Answers (1)

Alex Townsend
Alex Townsend

Reputation: 1564

The only place you call setArguments is at the line OverViewFragment.newInstance().setArguments(extrasForFragment); which is not used in your ViewPager. You want to set the arguments in your setupViewPager method, so like this:

Fragment overviewFrag = OverViewFragment.newInstance();
overviewFrag.setArguments(<args_bundle>);
adapter.addFrag(overviewFrag, getString(R.string.overview));

Upvotes: 7

Related Questions