热门标签 | 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 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
      • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
      • 在Android开发中,实现多点触控功能需要使用`OnTouchListener`监听器来捕获触摸事件,并在`onTouch`方法中进行详细的事件处理。为了优化多点触控的交互体验,开发者可以通过识别不同的触摸手势(如缩放、旋转等)并进行相应的逻辑处理。此外,还可以结合`MotionEvent`类提供的方法,如`getPointerCount()`和`getPointerId()`,来精确控制每个触点的行为,从而提升用户操作的流畅性和响应性。 ... [详细]
      • SQLite数据库CRUD操作实例分析与应用
        本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
      • 技术分享:深入解析GestureDetector手势识别机制
        技术分享:深入解析GestureDetector手势识别机制 ... [详细]
      • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
      • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
      • Spring框架中枚举参数的正确使用方法与技巧
        本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
      • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
        本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
      • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
      • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
      • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
        技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
      • REST与RPC:选择哪种API架构风格?
        在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
      • 在探讨C语言编程文本编辑器的最佳选择与专业推荐时,本文将引导读者构建一个基础的文本编辑器程序。该程序不仅能够打开并显示文本文件的内容及其路径,还集成了菜单和工具栏功能,为用户提供更加便捷的操作体验。通过本案例的学习,读者可以深入了解文本编辑器的核心实现机制。 ... [详细]
      • 本文介绍了如何通过掌握 IScroll 技巧来实现流畅的上拉加载和下拉刷新功能。首先,需要按正确的顺序引入相关文件:1. Zepto;2. iScroll.js;3. scroll-probe.js。此外,还提供了完整的代码示例,可在 GitHub 仓库中查看。通过这些步骤,开发者可以轻松实现高效、流畅的滚动效果,提升用户体验。 ... [详细]
      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社区 版权所有