navid abutorab
navid abutorab

Reputation: 189

android- nullpointer for sending bundle to fragment

I've a custom viewpager , I'm using it for making tabs in my application . this is my code;

    private TabLayout tabLayout;
    private ViewPager viewPager;
private void setupViewPager(ViewPager viewPager) {
        Fragment_Mashaghel fragmnetMashaghel=new Fragment_Mashaghel();

    Bundle bundle = new Bundle();
    Fragment_Cars stock=new Fragment_Cars();
    bundle.putString("type","stock");
    stock.setArguments(bundle);



    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(fragmnetMashaghel, getString(R.string.mashagahel));
    adapter.addFragment(stock, getString(R.string.stock));

    viewPager.setAdapter(adapter);
}

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 addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

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

this is my fragment :

public class Fragment_Cars extends Fragment {
View v;

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
Bundle b = getActivity().getIntent().getExtras();
    forWhat=b.getString("type");

I get null pointer exception in this line :

b.getString("type");

What is the problem ? how can I fill my bundle and set my arguments to fragment ?

Upvotes: 0

Views: 62

Answers (2)

Zozinski
Zozinski

Reputation: 93

In your Fragment Class use getArguments() instead of getExtras(). For example you can try the following:

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    String forWhat = getArguments().getString("type");
}

Hope this helps.

Upvotes: 0

vovahost
vovahost

Reputation: 36007

You have to use getArguments() instead of extras from activity's intent.

Bundle b = getArguments();

Full code

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    Bundle b = getArguments();
    forWhat = b.getString("type");
}

Documentation: https://developer.android.com/reference/android/app/Fragment.html#getArguments()

Upvotes: 1

Related Questions