Android:如何在导航后突出显示选项卡布局中下一个选项卡的标题(就像它被选中一样)

时间:2016-10-13 09:03:06

标签: android android-fragments tabs

我创建了一个带标签布局的注册表单,其中包含三个标签(三个片段)。点击“下一步”后,我已成功导航到下一个片段。在我之前的片段中。但是我的问题是我无法突出显示当前的标签,当我点击“下一步”时,该标签应突出显示(就像它被选中一样)。在我之前的片段中。

以下是我的第一个片段(帐户信息):

@Override
    public void onClick(View v) {
                emailid = email.getText().toString();
                if (!isValidEmail(emailid)) {
                    email.setError("Invalid Email");
                }

                pass = password.getText().toString();
                if (!isValidPassword(pass)) {
                    password.setError("Password cannot be empty");
                }
                confirmPass = confirmPassword.getText().toString();
                if (!isValidPassword(confirmPass)) {
                    confirmPassword.setError("Password cannot be empty");
                }

我使用下面的代码导航到下一个片段,有人可以建议如何在导航到下一个标签(片段)之后突出显示标题吗?

                if (isValidEmail(emailid) && isValidPassword(pass)) {
                    viewPager = (ViewPager) getActivity().findViewById(R.id.pager);
                    viewPager.setCurrentItem(1);
                }
    }

下面是我的活动代码,如何在标签上禁用触摸或点击事件?

tabLayout = (TabLayout) findViewById(R.id.tabLayout);

        tabLayout.addTab(tabLayout.newTab().setText("Account Info"));
        tabLayout.addTab(tabLayout.newTab().setText("Personal Info"));
        tabLayout.addTab(tabLayout.newTab().setText("Confirmation"));

        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

        viewPager = (ViewPager) findViewById(R.id.pager);
        viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(viewPagerAdapter);
        viewPager.setOnTouchListener(new View.OnTouchListener(){
            @Override
            public boolean onTouch(View v, MotionEvent event)
            {
                return true;
            }
        });
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }
            // This method will be invoked when a new page becomes selected.
            @Override
            public void onPageSelected(int position) {
            Toast.makeText(SignupActivity.this, "Selected page position: " + position, Toast.LENGTH_SHORT).show();
                tabLayout.tabP(true);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

2 个答案:

答案 0 :(得分:1)

对于这种方法,您必须实现此方法

viewPager.addOnPageChangeListener

并且在onPageSelected方法中,您必须根据条件重新编写选项卡名称

你可以实现像这样的方法

 private void initTabsName() {
        for (int i = 0; i < tabLayout.getTabCount(); i++) {
            TabLayout.Tab tab = tabLayout.getTabAt(i);
            RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.subcat_custom_tab, tabLayout, false);
      // do something to make tab selected using if else statements
        /* // for example
           if (i == 0) {

            }
         */
        tab.setCustomView(relativeLayout);
        }
    }

答案 1 :(得分:0)

添加以下代码解决了我的问题:

if (isValidEmail(emailid) && isValidPassword(pass)) {
    viewPager = (ViewPager) getActivity().findViewById(R.id.pager);
    viewPager.setCurrentItem(1);
    tabLayout = (TabLayout) getActivity().findViewById(R.id.tabLayout);
    tabLayout.getTabAt(1).select();
}

如果条件为真,我已启动tabLayout并调用方法getTabAt(),该方法负责突出显示选项卡布局中的选项卡。我在getTabAt(1)中确切地指定了标签位置“1”(不是0,因为0仍然是第一个标签),我需要在成功条件下突出显示。