i have a lite problem with my code, i was search in this site but still not found the best answer i will send data to my tab fragment, this my code
My Activity class
public class MainActivity extends AppCompatActivity
private ViewPager pager;
private Toolbar toolbar;
private TabLayout tabs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pager=(ViewPager) findViewById(R.id.pager);
tabs=(TabLayout) findViewById(R.id.tabs);
pager.setAdapter(new TabFragmentPagerAdapter(getSupportFragmentManager()));
tabs.setupWithViewPager(pager);
tabs.setTabGravity(TabLayout.GRAVITY_FILL);
Bundle bundle = new Bundle();
bundle.putString("edttext", "data From Activity");
// set Fragmentclass Arguments
tab1Fragment fragobj = new tab1Fragment();
fragobj.setArguments(bundle);
}
}
and this my tab1 class
public class tab1Fragment extends Fragment
public tab1Fragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_tab1, container, false);
TextView tes=(TextView) view.findViewById(R.id.testtab1);
String strtext = getArguments().getString("edttext");
tes.setText("tes :"+ strtext);
return view;
}
}
and this my page fragment adapter
public class TabFragmentPagerAdapter extends FragmentPagerAdapter
String[] title = new String[]{
"Tab 1", "Tab 2", "Tab 3"
};
public TabFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position){
Fragment fragment=null;
switch (position){
case 0:
fragment=new tab1Fragment();
break;
case 1:
fragment=new tab2Fragment();
break;
case 2:
fragment=new tab3Fragment();
break;
default:
fragment=null;
break;
}
return fragment;
}
@Override
public CharSequence getPageTitle(int position){
return title[position];
}
@Override
public int getCount(){
return title.length;
}
}
when i run error
java.lang.NullPointerException
Please Help
In your AppCompatActivity
you have send
tab1Fragment fragobj = new tab1Fragment();
fragobj.setArguments(bundle);
but in your TabFragmentPagerAdapter
fragment=new tab1Fragment();
break;
it has null arguments
inside switch
switch (position){
case 0:
fragment=new tab1Fragment();
Bundle bundle = new Bundle();
bundle.putString("edttext", "data From Activity");
fragment.setArguments(bundle);
break;
May be you are getting NullPointerException
because your fragment getting initialised again inside getItem
without argument.
Try this way.
@Override
public Fragment getItem(int position){
Fragment fragment=null;
Bundle bundle = new Bundle();
bundle.putString("edttext", "data From Activity");
switch (position){
case 0:
fragment=new tab1Fragment();
fragment.setArguments(bundle);
break;
case 1:
fragment=new tab2Fragment();
break;
case 2:
fragment=new tab3Fragment();
break;
default:
fragment=null;
break;
}
return fragment;
}
Note : make sure you are importing same versions of Fragment in both MainActivity and tab1Fragment.
I think You Start the Tab1Frament() with On call of Youractivity first You can do it...
Used this..
if (savedInstanceState == null) {
FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();
tab1Fragment fragobj = new tab1Fragment();
Bundle bundle = new Bundle();
bundle.putString("edttext", "data From Activity");
// set Fragmentclass Arguments
fragobj.setArguments(bundle);
ft.replace(R.id.frame, fragobj);
ft.addToBackStack(null);
ft.commit();
}
Instead of
Bundle bundle = new Bundle();
bundle.putString("edttext", "data From Activity");
// set Fragmentclass Arguments
tab1Fragment fragobj = new tab1Fragment();
fragobj.setArguments(bundle);
Create a function in the fragment to pass in the data from activity just like you do in getters
and setters
for object classes like so:
// Fragment
class TabFragment extends Fragment{
public String myDataString;
...
public void setTabInfo(String myActivityString){
this.myDataString = myActivityString;
}
}
// Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
TabFragment frag = new TabFragment();
frag.setTabInfo("data From Activity");
}
I prefer this method since you pass the data directly without having to serialize the object in the case of using Bundle
in the case of objects
Maybe its late answer, but there is something that worked for me:
send your bundle to adapter:
Bundle bundle = new Bundle();
bundle.putString("edttext", "data From Activity");
pager.setAdapter(new TabFragmentPagerAdapter(getSupportFragmentManager(), bundle));
extend a constructor in your adapter:
Bundle bundle;
public TabFragmentPagerAdapter(FragmentManager fm, Bundle bundle) {
super(fm);
this.bundle=bundle;
}
and send it to the fragment:
switch (position){
case 0:
fragment=new tab1Fragment();
fragment.setArguments(bundle);
break;
hopefully, it helps. }
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.