当前位置: 首页 > 知识库问答 >
问题:

如何在Android中为swipe tab中的每个tab显示吐司消息?

曾新立
2023-03-14

当我运行这段代码时,两个不同片段中的toast显示在一个选项卡上。当我滑动到下一个选项卡时,什么也不显示。

这是我的主要选项卡活动:

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

}

这是适配器类:

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

}

这是我的第一个片段:

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


}

如有任何建议,我们将不胜感激。我被困在这了。

共有1个答案

狄宪
2023-03-14

这是因为下一个片段是由分页器创建的

在显示toast之前,请检查该片段是否可见

if(fragmentName.this.isVisible())
{
// do your stuff here
}
 类似资料:
  • 我试过: 在中。出于某种原因,cancel方法永远不起作用。 如果我在显示应用程序之前放入...然后会有另一个空检查。但在这样做之后,它也不起作用。我可以显示对话框而不是祝酒词,但这不是一个解决方案。

  • 问题内容: 我试图显示一条带有整数的吐司消息这就是我试图做到的方式: 但这会使我的应用程序崩溃。感谢帮助! 问题答案: 将a 或an 作为其第二个参数。 但是,表示 资源ID (例如)。 应用程序崩溃可能是因为没有找到具有该ID的资源,因为它不是以ID开头的ID,而是任意整数。 在您的情况下,请使用。

  • 我有一个自定义的吐司diplaying图像和一些文本。这个祝酒词足够大,几乎可以覆盖半个屏幕。它的持续时间为LENGTH_LONG,因为它包含很多信息。