I have a tab layout and i want to send my id into my fragment. I have tried using Bundle but it doesn't work. It seems I have misplaced the code. This is the code.
My Activity
public class DetailPegawai extends AppCompatActivity {
private ViewPager mViewPager;
private SectionsPagerAdapter mSectionsPageAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail_pegawai);
getSupportActionBar().hide();
mSectionsPageAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.container);
setupViewPager(mViewPager);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
}
private void setupViewPager(ViewPager viewPager) {
String id = getIntent().getStringExtra("id");
SectionsPagerAdapter adapter = new SectionsPagerAdapter(getSupportFragmentManager());
Bundle bundle = new Bundle();
bundle.putString("id", id);
Tab_1_Workplace fragobj = new Tab_1_Workplace();
fragobj.setArguments(bundle);
adapter.addFragment(new Tab_1_Workplace(), "WORKPLACE");
adapter.addFragment(new Tab_2_PersonalInfo(), "INFO");
viewPager.setAdapter(adapter);
}
My Fragment
public class Tab_1_Workplace extends Fragment{
String id;
View rootView;
public Tab_1_Workplace() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView=inflater.inflate(R.layout.tab_1_workplace, container, false);
bundle = this.getArguments();
id = bundle.getString("id");
return rootView;
}
Section Pager Adapter
public class SectionsPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
Logcat Error
java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
You have set the Bundle. but the problem is you never send it. you must call your fragment with your bundle, not your default Fragment.
adapter.addFragment(fragobj, "WORKPLACE");
So your code must be like this
public class DetailPegawai extends AppCompatActivity {
private ViewPager mViewPager;
private SectionsPagerAdapter mSectionsPageAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail_pegawai);
getSupportActionBar().hide();
mSectionsPageAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.container);
setupViewPager(mViewPager);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
}
private void setupViewPager(ViewPager viewPager) {
String id = getIntent().getStringExtra("id");
SectionsPagerAdapter adapter = new SectionsPagerAdapter(getSupportFragmentManager());
Bundle bundle = new Bundle();
bundle.putString("id", id);
Tab_1_Workplace fragobj = new Tab_1_Workplace();
fragobj.setArguments(bundle);
adapter.addFragment(fragobj, "WORKPLACE");
adapter.addFragment(new Tab_2_PersonalInfo(), "INFO");
viewPager.setAdapter(adapter);
}