Ive read several places (here, here or here) on how to do this and Ive tried to follow them, but im missing something that im not sure what is. I want to send data from FragmentAlarm to FragmentHome. The code below is my attempt on this. Im trying to mess around a bit.
1) Why am i not getting any outputs?
2) Also do i HAVE to go through MainActivity in order to communicate between 2 fragments? I've tried to use a public static method combined with FragmentStatePagerAdapter to "avoid" using MainActivity. but im not sure if that is possible or not.
Thanks in advance
FragmentAlarm
public class FragmentAlarm extends Fragment implements SeekBar.OnSeekBarChangeListener{
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private String mParam1;
private String mParam2;
public FragmentAlarm() { // Required empty public constructor}
public static FragmentAlarm newInstance(String param1, String param2) {
FragmentAlarm fragment = new FragmentAlarm();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
//put any extra arguments that you may want to supply to this fragment
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab_alarm,container,false);
FragmentAlarm.newInstance(ARG_PARAM1,"test from alarm");
FragmentHome.newInstance(ARG_PARAM1,"test from alarm");
return v;
}
@Override
public void onStart() {
super.onStart();
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
System.out.println("mParam1 " + mParam1);
System.out.println("mParam2 " + mParam2);
}
}
}
FragmentHome
public class FragmentHome extends Fragment implements ValuesLoadedListener, SwipeRefreshLayout.OnRefreshListener {
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private String mParam1;
private String mParam2;
public FragmentHome() {// Required empty public constructor }
// TODO: Rename and change types and number of parameters
public static FragmentHome newInstance(String param1, String param2) {
FragmentHome fragment = new FragmentHome();
Bundle args = new Bundle();
//put any extra arguments that you may want to supply to this fragment
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onStart() {
super.onStart();
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
System.out.println("mParam1 " + mParam1);
System.out.println("mParam2 " + mParam2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab_home,container,false);
FragmentAlarm.newInstance(ARG_PARAM1,"test from home");
FragmentHome.newInstance(ARG_PARAM1,"test from home");
...
return v;
}
PagerAdapter
public class MyViewPagerAdapter extends FragmentStatePagerAdapter {
private Context context;
int icons[] = {R.drawable.ic_home,
R.drawable.ic_graph,
R.drawable.ic_bell_mid,
R.drawable.ic_settings};
public MyViewPagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
@Override
public Fragment getItem(int position) {
if(position == 0) // if the position is 0 we are returning the First tab
{
return new FragmentHome();
}
else if (position == 1)
{
return new FragmentTrend();
}
else if (position == 2)
{
return new FragmentAlarm();
}
else
{
return new FragmentSetting();
}
}
@Override
public int getCount() {
return 4;
}
public Drawable getIcon(int position)
{
return context.getResources().getDrawable(icons[position]);
}
}