1

when i run this code,the toast in two different fragments are displayed on one tab. when i swipe to next tab nothing is displayed.

this is is my main tab activity:

   public class MainActivity extends FragmentActivity implements
        ActionBar.TabListener {


private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
// Tab titles
private String[] tabs = { "Offers", "Distance", "Happy Hours","Shop List" };

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    // Initilization
    viewPager = (ViewPager) findViewById(R.id.pager);
    actionBar = getActionBar();
    mAdapter = new TabsPagerAdapter(getSupportFragmentManager());

    viewPager.setAdapter(mAdapter);
    actionBar.setHomeButtonEnabled(false);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);        

    // Adding Tabs
    for (String tab_name : tabs) {
        actionBar.addTab(actionBar.newTab().setText(tab_name)
                .setTabListener(this));
    }

    /**
     * on swiping the viewpager make respective tab selected
     * */
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            // on changing the page
            // make respected tab selected
            actionBar.setSelectedNavigationItem(position);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    // on tab selected
    // show respected fragment view
    viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}

}

this is adapter class :

public class TabsPagerAdapter extends FragmentStatePagerAdapter {
Bundle bundle = new Bundle();

public TabsPagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int index) {

    switch (index) {

    case 0:
        Fragment of = new OfferFragment();
        bundle.putString("OfferFragment", "OfferFragment");
        of.setArguments(bundle);
        return of;

    case 1:
        Fragment df = new DistanceFragment();
        bundle.putString("DistanceFragment", "DistanceFragment");
        df.setArguments(bundle);
        return df;

    case 2:
        Fragment hf = new HappyHoursFragment();
        bundle.putString("HappyHoursFragment", "HappyHoursFragment");
        hf.setArguments(bundle);
        return hf;

    case 3:
        Fragment sf = new ShoplistFragment();
        bundle.putString("ShoplistFragment", "ShoplistFragment");
        sf.setArguments(bundle);
        return sf;
    }

    return null;
}

@Override
public int getCount() {

    return 4;
}

}

this is my first fragment :

public class OfferFragment extends Fragment {
private String name;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    // public static final String ARG_OBJECT = "object";

    View rootView = inflater.inflate(R.layout.offerfragment, container,
            false);

    Bundle args = getArguments();
    TextView txtview = (TextView) rootView.findViewById(R.id.offer);

    name = args.getString("OfferFragment");

    txtview.setText(args.getString("OfferFragment"));

    display();

    return rootView;
}

private void display() {
    // TODO Auto-generated method stub
    Toast.makeText(getActivity(), name, Toast.LENGTH_SHORT).show();
}
}

this is my second fragment :

public class DistanceFragment extends Fragment {

private String name;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.distancefragment, container, false);

    Bundle args = getArguments();
    TextView txtview = (TextView) rootView.findViewById(R.id.distance);

    name = args.getString("DistanceFragment");

    txtview.setText(args.getString("DistanceFragment"));

    display();

    return rootView;
}

private void display() {
    // TODO Auto-generated method stub
    Toast.makeText(getActivity(), name, Toast.LENGTH_SHORT).show();
}


}

any suggestions are appreciated. am stuck with this.

bodyfarmer
  • 402
  • 1
  • 7
  • 17
Sagar Pawar
  • 465
  • 4
  • 26
  • You say that when you run the code the toast for 2 fragments is displayed!. That is the expected behavior. Check this http://stackoverflow.com/questions/20412379/viewpager-update-fragment-on-swipe apart form reading view pager docs – Raghunandan Apr 23 '15 at 12:20
  • thanks for reply.. yes.. but both toasts are displayed under first fragment itself. i want them to display in two different fragments. when i swipe from first fragment to second fragment ,the second toast message should be displayed under second fragment, not in first fragment. – Sagar Pawar Apr 23 '15 at 12:27

2 Answers2

0

This is because next fragment is created by pager

before showing toast check if that fragment is visible or not

if(fragmentName.this.isVisible())
{
// do your stuff here
}
N J
  • 27,217
  • 13
  • 76
  • 96
0

Write onResume() in every fragment class.

 @Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) { 
        //Display Toast message here
    }
}