【问题标题】:How can I show this Toast message only if I click the second Tab?仅当我单击第二个选项卡时,如何才能显示此 Toast 消息?
【发布时间】:2017-04-01 16:33:24
【问题描述】:

我有一个导航栏,其中包含三个选项卡,每个选项卡都是一个片段。 我在我的第二个片段的 onCreateView 方法中写了这个 toast 消息:

public class SecondFragment extends Fragment{

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView=inflater.inflate(R.layout.second_layout,container,false);


        Toast.makeText(getContext(), "Test", Toast.LENGTH_LONG).show();

        return rootView;
    }

我想要的是,只有当我单击此选项卡时才会显示消息。 但问题是如果我启动应用程序会直接显示消息,但是为什么呢?

这是我的 MainActivity.java:

public class MainActivity extends AppCompatActivity{
    NavigationView mNavigationView;
    FragmentManager mFragmentManager;
    FragmentTransaction mFragmentTransaction;

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


        /**
         *Setup the DrawerLayout and NavigationView
         */

        mNavigationView = (NavigationView) findViewById(R.id.shitstuff) ;

        /**
         * Lets inflate the very first fragment
         * Here , we are inflating the TabFragment as the first Fragment
         */

        mFragmentManager = getSupportFragmentManager();
        mFragmentTransaction = mFragmentManager.beginTransaction();
        mFragmentTransaction.replace(R.id.containerView,new TabFragment()).commit();

    }


}

而且(我认为这对这个问题很重要)我的 TabFragment:

public class TabFragment extends Fragment {
    public static TabLayout tabLayout;
    public static ViewPager viewPager;
    public static int int_items = 3 ;

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



        /**
         *Inflate tab_layout and setup Views.
         */
            View x =  inflater.inflate(R.layout.tab_layout,null);
            tabLayout = (TabLayout) x.findViewById(R.id.tabs);
            viewPager = (ViewPager) x.findViewById(R.id.viewpager);

        /**
         *Set an Apater for the View Pager
         */
        viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));

        /**
         * Now , this is a workaround ,
         * The setupWithViewPager dose't works without the runnable .
         * Maybe a Support Library Bug .
         */

        tabLayout.post(new Runnable() {
            @Override
            public void run() {
                    tabLayout.setupWithViewPager(viewPager);
                   }
        });

        return x;

    }

    class MyAdapter extends FragmentPagerAdapter {

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

        /**
         * Return fragment with respect to Position .
         */

        @Override
        public Fragment getItem(int position)
        {

            if(position == 0){
                return new FirstFragment();
            }
            if(position == 1){
                return new SecondFragment();
            }
            if(position == 2){
                return new ThirdFragment();
            }

        return null;
        }

        @Override
        public int getCount() {

            return int_items;

        }

        /**
         * This method returns the title of the tab according to the position.
         */

        @Override
        public CharSequence getPageTitle(int position) {

            switch (position){
                case 0 :
                    return "First";
                case 1 :
                    return "Second";
                case 2 :
                    return "Third";
            }
                return null;
        }
    }

}

那么我必须在哪里说 Toast.makeText(getContext(), "Test", Toast.LENGTH_LONG).show(); 才能仅通过按第二个选项卡来显示它?

【问题讨论】:

    标签: java android android-fragments tabs toast


    【解决方案1】:

    您可以在 toast 显示后使用代码终止它,这样当您单击另一个片段时它就不会可见。

    试试这个

    toast = new Toast(getContext());
    toast.cancel(); //this will prevent toast from displaying multiple times
    

    希望能成功

    【讨论】:

    • 我用 Toast 示例提出了这个问题。但实际上我想在单击第二个选项卡时显示我的插页式广告,这就是为什么我需要知道在哪里写该行。
    【解决方案2】:

    等等!如果您有多个选项卡,则每个选项卡必须包含单独的片段,并且每个片段都有 java 类和相同的布局文件,那么编码部分将在 java 文件的 onCreate 方法中,xml/layout 部分将在 .xml文件就是这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多