2016-09-28 6 views
0

私はカスタムビューページを持っています。私はアプリケーションでタブを作成するために使っています。これは私のコードです。フラグメントにバンドルを送信するためのandroid-nullpointer

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); 
    } 
} 

これは私の断片である:

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"); 

私は、この行でnullポインタ例外を取得:

b.getString("type"); 

問題は何ですか?私のバンドルを埋めることができ、私の議論をフラグメントに設定するには?

+2

データをフラグメント化する場合は、「Bundle bundle = getArguments();」を使用します。 –

+0

また、StackOverflowのドキュメントもチェックできました:http://stackoverflow.com/documentation/android/1396/fragment/11774/pass -data-from-activity-to-fragment-using-bundle#t = 201609280946250223408 – devnull69

答えて

1

アクティビティの意図からの補足の代わりにを使用する必要があります。

Bundle b = getArguments(); 

全コード

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

ドキュメント:あなたのフラグメントクラスでhttps://developer.android.com/reference/android/app/Fragment.html#getArguments()

0

の代わりgetExtras()を使用しています。たとえば、次のように試してみてください。

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

関連する問題