【问题标题】:viewpager.setCurretntItem() at button onClickListenerviewpager.setCurrretntItem() 在按钮 onClickListener
【发布时间】:2016-08-09 09:26:03
【问题描述】:

我是 android 应用程序开发的新手,我目前正在开发一个具有带有 TabBarLayout 的 NavigationDrawer 的项目。 我的问题是我有一个由两个按钮登录和注册组成的片段:

 lgn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                fragmentManager=getActivity().getSupportFragmentManager();
                fragmentTransaction=fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.containerView,new TabFragment()).addToBackStack(null).commit();
            }
        });

        rgst.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                fragmentManager=getActivity().getSupportFragmentManager();
                fragmentTransaction=fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.containerView,new TabFragment()).addToBackStack(null).commit();
            }
        });

现在如果我点击登录或注册按钮标签栏布局打开。 现在我希望如果我点击登录按钮,登录片段显示在标签栏布局中,如果我点击注册按钮,注册片段在标签栏中打开。

我也在谷歌上搜索并找到viewpager.setCurrentItem但我无法使用它来满足我的要求

我是这样用的

public class TabFragment extends Fragment {

    public static TabLayout tabLayout;
    public static ViewPager viewPager;
    public static int int_items = 2 ;

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

        View x=inflater.inflate(R.layout.tab_layout,null);

        tabLayout=(TabLayout)x.findViewById(R.id.tabs);
        viewPager=(ViewPager)x.findViewById(R.id.viewpager);

        viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));

        viewPager.setCurrentItem(1); //here i am unable to decide how to open specific fragment

        tabLayout.post(new Runnable() {
            @Override
            public void run() {

                tabLayout.setupWithViewPager(viewPager);
            }
        });
        return x;
    }
    class MyAdapter extends FragmentPagerAdapter{

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

        @Override
        public Fragment getItem(int position) {
            switch (position)
            {
                case 0: return new Login();
                case 1: return new Registration();

            }

            return null;
        }

        @Override
        public int getCount() {
            return int_items;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position)
            {
                case 0:
                    return "Login";
                case 1:
                    return "Registration";
            }
            return null;
        }
    }

请提示我这样做的一些逻辑...提前谢谢...

【问题讨论】:

    标签: android android-layout android-fragments android-viewpager navigation-drawer


    【解决方案1】:

    通过单击按钮传递布尔值并在 TabFragment 中接收它们。

    检查布尔值并设置适当的 viewpager 项:

    首先在注册和登录按钮片段中传递值来确定点击了哪个按钮

     lgn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    fragmentManager=getActivity().getSupportFragmentManager();
                    Bundle bundle=new Bundle();
                    bundle.putBoolean("Register",false);
                    TabFragment fragment=new TabFragment();
                    fragment.setArguments(bundle);
                    fragmentTransaction=fragmentManager.beginTransaction();
                    fragmentTransaction.replace(R.id.containerView,fragment).addToBackStack(null).commit();
                }
            });
    
            rgst.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
    
                    fragmentManager=getActivity().getSupportFragmentManager();
                    Bundle bundle=new Bundle();
                    bundle.putBoolean("Register",true);
                    TabFragment fragment=new TabFragment();
                    fragment.setArguments(bundle);
                    fragmentTransaction=fragmentManager.beginTransaction();
                    fragmentTransaction.replace(R.id.containerView,fragment).addToBackStack(null).commit();
                }
            });
    

    然后在标签栏布局中使用此代码来考虑布尔值是真还是假

     @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    
            View x=inflater.inflate(R.layout.tab_layout,null);
    
            tabLayout=(TabLayout)x.findViewById(R.id.tabs);
            viewPager=(ViewPager)x.findViewById(R.id.viewpager);
    
            viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
    
    
            Bundle bundle=getArguments();
           check=bundle.getBoolean("Register");
            if (check)
            {
                viewPager.setCurrentItem(1);
            }
    
            tabLayout.post(new Runnable() {
                @Override
                public void run() {
    
                    tabLayout.setupWithViewPager(viewPager);
                }
            });
            return x;
        }
    

    【讨论】:

    • 以及如何考虑这个布尔值对于哪个按钮为真
    • 这是你的逻辑。说登录按钮你设置布尔值为真,注册为假。然后检查布尔值并启动适当的viewpager项目。
    • 感谢您的回复,但我要求登录和注册按钮在另一个片段页面中,以及我如何告诉我的标签栏布局单击哪个按钮以打开特定登录或注册页面...。跨度>
    • 通过单击注册和登录按钮将布尔值或标志传递给片段(TabFragment)。然后检查其值并启动viewpager
    • 看到这个传递数据:stackoverflow.com/questions/12739909/… 或者你可以在谷歌上找到它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2014-11-12
    相关资源
    最近更新 更多