热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android开发分享TabLayout选项卡select

如何以编程方式selectTabLayout中的选项卡?TabLayouttabLayout(TabLayout)find

如何以编程方式selectTabLayout中的选项卡?

TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setupWithViewPager(viewPager); 

    如果您知道要select的选项卡的索引,可以这样做:

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); TabLayout.Tab tab = tabLayout.getTabAt(someIndex); tab.select(); 

    即使你自己使用TabLayout而没有ViewPager(这是非典型的,可能是坏习惯,但是我已经看到它完成了),这种技术也可以工作。

    这是我解决它的方法:

     void selectPage(int pageIndex){ tabLayout.setScrollPosition(pageIndex,0f,true); viewPager.setCurrentItem(pageIndex); } 

    这可能不是最终的解决scheme它需要您将TabLayoutTabLayout一起使用 ,但这是我解决它的方法:

     void selectPage(int pageIndex) { viewPager.setCurrentItem(pageIndex); tabLayout.setupWithViewPager(viewPager); } 

    我testing了使用此代码的性能影响有多大,首先查看Android Studio中的CPU和内存监视器,同时运行该方法,然后将其与在页面之间导航时放置在CPU和内存上的负载进行比较我自己(使用滑动手势),差异不是很大,所以至less不是一个可怕的解决scheme…

    希望这可以帮助别人!

    如果您不能使用tab.select()并且不想使用ViewPager,则仍然可以通过编程方式select一个选项卡。 如果您通过TabLayout.Tab setCustomView(android.view.View view)使用自定义视图, TabLayout.Tab setCustomView(android.view.View view)简单。 以下是如何做到这一点。

     // if you've set a custom view void updateTabSelection(int position) { // get the position of the currently selected tab and set selected to false mTabLayout.getTabAt(mTabLayout.getSelectedTabPosition()).getCustomView().setSelected(false); // set selected to true on the desired tab mTabLayout.getTabAt(position).getCustomView().setSelected(true); // move the selection indicator mTabLayout.setScrollPosition(position, 0, true); // ... your logic to swap out your fragments } 

    如果你不使用自定义视图,那么你可以这样做

     // if you are not using a custom view void updateTabSelection(int position) { // get a reference to the tabs container view LinearLayout ll = (LinearLayout) mTabLayout.getChildAt(0); // get the child view at the position of the currently selected tab and set selected to false ll.getChildAt(mTabLayout.getSelectedTabPosition()).setSelected(false); // get the child view at the new selected position and set selected to true ll.getChildAt(position).setSelected(true); // move the selection indicator mTabLayout.setScrollPosition(position, 0, true); // ... your logic to swap out your fragments } 

    使用StateListDrawable在已select和未select的可绘制物体之间进行切换,或使用颜色和/或可绘制物体进行类似的操作。

    使用tabs.getTabAt(2).select();

    用这个:

      

    在OnClickListener之后:

     TabLayout tabLayout = (TabLayout) findViewById(R.id.patienthomescreen_tabs); TabLayout.Tab tab = tabLayout.getTabAt(someIndex); tab.select(); 

    尝试这个

      new Handler().postDelayed( new Runnable(){ @Override public void run() { if (i == 1){ tabLayout.getTabAt(0).select(); } else if (i == 2){ tabLayout.getTabAt(1).select(); } } }, 100); 

    只需设置viewPager.setCurrentItem(index) ,关联的TabLayout将select相应的选项卡。

    为您的viewpager添加:

      viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { array.clear(); switch (position) { case 1: //like a example setViewPagerByIndex(0); break; } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } }); 

    / /在处理程序,以防止崩溃outofmemory

     private void setViewPagerByIndex(final int index){ Application.getInstance().getHandler().post(new Runnable() { @Override public void run() { viewPager.setCurrentItem(index); } }); } 

    你可以试着解决这个问题:

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setupWithViewPager(mViewPager); TabLayout.Tab tab = tabLayout.getTabAt(pos); if (tab != null) { tab.select(); } 

    默认情况下,如果你select一个标签,它将被突出显示。 如果你想select明确的意思是使用onTabSelected(TabLayout.Tab标签)下给定的注释代码与你指定的标签索引位置。 这段代码将使用viewpager解释关于选项卡选定位置的更改片段。

     public class GalleryFragment extends Fragment implements TabLayout.OnTabSelectedListener { private ViewPager viewPager;public ViewPagerAdapter adapter;private TabLayout tabLayout; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_gallery, container, false); viewPager = (ViewPager) rootView.findViewById(R.id.viewpager); adapter = new ViewPagerAdapter(getChildFragmentManager()); adapter.addFragment(new PaymentCardFragment(), "PAYMENT CARDS"); adapter.addFragment(new LoyaltyCardFragment(), "LOYALTY CARDS"); viewPager.setAdapter(adapter); tabLayout = (TabLayout) rootView.findViewById(R.id.tabs); tabLayout.setupWithViewPager(viewPager); tabLayout.setOnTabSelectedListener(this); } @Override public void onTabSelected(TabLayout.Tab tab) { //This will be called 2nd when you select a tab or swipe using viewpager final int position = tab.getPosition(); Log.i("card", "Tablayout pos: " + position); //TabLayout.Tab tabdata=tabLayout.getTabAt(position); //tabdata.select(); tabLayout.post(new Runnable() { @Override public void run() { if (position == 0) { PaymentCardFragment paymentCardFragment = getPaymentCardFragment(); if (paymentCardFragment != null) { VerticalViewpager vp = paymentCardFragment.mypager; if(vp!=null) { //vp.setCurrentItem(position,true); vp.setCurrentItem(vp.getAdapter().getCount()-1,true); } } } if (position == 1) { LoyaltyCardFragment loyaltyCardFragment = getLoyaltyCardFragment(); if (loyaltyCardFragment != null) { VerticalViewpager vp = loyaltyCardFragment.mypager; if(vp!=null) { vp.setCurrentItem(position); } } } } }); } @Override public void onTabUnselected(TabLayout.Tab tab) { //This will be called 1st when you select a tab or swipe using viewpager } @Override public void onTabReselected(TabLayout.Tab tab) { //This will be called only when you select the already selected tab(Ex: selecting 3rd tab again and again) } private PaymentCardFragment getLoyaltyCardFragment() { Fragment f = adapter.mFragmentList.get(viewPager.getCurrentItem()); if(f instanceof PaymentCardFragment) { return (PaymentCardFragment) f; } return null; } private LoyaltyCardFragment getPaymentCardFragment() { Fragment f = adapter.mFragmentList.get(viewPager.getCurrentItem()); if(f instanceof LoyaltyCardFragment) { return (LoyaltyCardFragment) f; } return null; } class ViewPagerAdapter extends FragmentPagerAdapter { public List mFragmentList = new ArrayList<>(); private final List mFragmentTitleList = new ArrayList<>(); public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } } } 

    正在使用TabLayout切换片段。 它大部分工作,除非我试图用tab.select()以编程方式select一个选项卡,我的TabLayout.OnTabSelectedListener会触发onTabSelected(TabLayout.Tab tab) ,这将导致我非常悲伤。 我正在寻找一种方法来做select而不触发监听器。

    所以我改编了@kenodoggy的答案。 我进一步面临一些问题,其中一些内部对象将返回null(因为他们还没有创build,因为我是从我的片段回答onActivityResult() ,这是在activity为singleTasksingleInstance的情况下发生在onCreate()之前),所以我写了一个详细的if / else序列来报告错误,并通过没有NullPointerException否则会触发。 我使用木材进行日志logging,如果您不使用Log.e()替代品。

     void updateSelectedTabTo(int position) { if (tabLayout != null){ int selected = tabLayout.getSelectedTabPosition(); if (selected != -1){ TabLayout.Tab oldTab = tabLayout.getTabAt(0); if (oldTab != null){ View view = oldTab.getCustomView(); if (view != null){ view.setSelected(false); } else { Timber.e("oldTab customView is null"); } } else { Timber.e("oldTab is null"); } } else { Timber.e("selected is -1"); } TabLayout.Tab newTab = tabLayout.getTabAt(position); if (newTab != null){ View view = newTab.getCustomView(); if (view != null){ view.setSelected(false); } else { Timber.e("newTab customView is null"); } } else { Timber.e("newTab is null"); } } else { Timber.e("tablayout is null"); } } 

    在这里,tabLayout是绑定到我的XML中的TabLayout对象的内存variables。 而且我不使用滚动标签function,所以我也删除了这个function。

    这也可以帮助

     viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i1) { } @Override public void onPageSelected(int i) { tablayout.getTabAt(i).select(); } @Override public void onPageScrollStateChanged(int i) { } }); 

      以上就是android开发分享TabLayout选项卡select相关内容,想了解更多android开发(异常处理)及android游戏开发关注(编程笔记)。


      推荐阅读
      • 在Android开发中,实现多点触控功能需要使用`OnTouchListener`监听器来捕获触摸事件,并在`onTouch`方法中进行详细的事件处理。为了优化多点触控的交互体验,开发者可以通过识别不同的触摸手势(如缩放、旋转等)并进行相应的逻辑处理。此外,还可以结合`MotionEvent`类提供的方法,如`getPointerCount()`和`getPointerId()`,来精确控制每个触点的行为,从而提升用户操作的流畅性和响应性。 ... [详细]
      • Android 自定义 RecycleView 左滑上下分层示例代码
        为了满足项目需求,需要在多个场景中实现左滑删除功能,并且后续可能在列表项中增加其他功能。虽然网络上有很多左滑删除的示例,但大多数封装不够完善。因此,我们尝试自己封装一个更加灵活和通用的解决方案。 ... [详细]
      • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
      • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
      • 实验九:使用SharedPreferences存储简单数据
        本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
      • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
      • 【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ... [详细]
      • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
      • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
      • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
      • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
      • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
      • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
      • 深入解析Android 4.4中的Fence机制及其应用
        在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
      • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
      author-avatar
      小宇宇宙2502862273
      这个家伙很懒,什么也没留下!
      PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
      Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有