首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin forms TabbedPage

Xamarin forms TabbedPage
EN

Stack Overflow用户
提问于 2018-10-16 18:56:18
回答 1查看 369关注 0票数 3

我在我的xamarin forms项目中使用选项卡页。我正在尝试在安卓的MyTabsRenderer类中使用OnTabReselected事件。但是像OnTabSelected,OnTabReselected和OnTabUnselected这样的事件没有被调用。有没有人有解决这个问题的办法。

xamarin forms版本: 3.2.0.871581

VS版本: 15.8.6

下面是我的代码片段(MyTabsRenderer类):

代码语言:javascript
复制
using Android.OS;
using Android.Views;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android.AppCompat;
using MyProject;
using MyProject.Droid;
using Xamarin.Forms.Platform.Android;
using System.ComponentModel;
using Android.Support.V4.View;
using Android.Content.Res;
using Android.Content;
using Android.Support.Design.Widget;

[assembly: ExportRenderer(typeof(TabController), typeof(MyTabsRenderer))]
namespace MyProject.Droid
{
    public class MyTabsRenderer : TabbedPageRenderer, TabLayout.IOnTabSelectedListener
    {


        bool setup;
        ViewPager viewPager;
        TabLayout tabLayout;

        public MyTabsRenderer(Context context) : base(context)
        {
        }

        protected override void SetTabIcon(TabLayout.Tab tab, FileImageSource icon)
        {
            base.SetTabIcon(tab, icon);
        }

        protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
        {
            base.OnElementChanged(e);
        }
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            //if (setup)
            //    return;


            if (e.PropertyName == "Renderer" || e.PropertyName == "CurrentPage")
            {
                viewPager = (ViewPager)ViewGroup.GetChildAt(0);
                tabLayout = (TabLayout)ViewGroup.GetChildAt(1);
                setup = true;
                ColorStateList colors = GetTabColor();

                for (int i = 0; i < tabLayout.TabCount; i++)
                {
                    var tab = tabLayout.GetTabAt(i);
                    SetTintColor(tab, colors);
                }
                tabLayout.SetOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager));
            }
        }


        void OnTabReselected(TabLayout.Tab tab)
        {
            // To have the logic only on he tab on position 1
            if (tab == null || tab.Position != 1)
            {
                return;
            }

            if (tab.Text == "Play")
            {
                tab.SetText("Pause");
                tab.SetIcon(Resource.Drawable.icon);
                // App.pauseCard = false;
            }
            else
            {
                tab.SetText("Play");
                tab.SetIcon(Resource.Drawable.icon);
                //  App.pauseCard = true;
            }

            SetTintColor(tab, GetTabColor());

        }

        void SetTintColor(TabLayout.Tab tab, ColorStateList colors)
        {
            var icon = tab?.Icon;
            if (icon != null)
            {
                icon = Android.Support.V4.Graphics.Drawable.DrawableCompat.Wrap(icon);
                Android.Support.V4.Graphics.Drawable.DrawableCompat.SetTintList(icon, colors);
            }
        }

        ColorStateList GetTabColor()
        {
            return ((int)Build.VERSION.SdkInt >= 23)
                ? Resources.GetColorStateList(Resource.Color.icon_tab, Forms.Context.Theme)
                               : Resources.GetColorStateList(Resource.Color.icon_tab);
        }

    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-10-17 05:07:58

这可能是因为您设置了错误的OnTabSelectedListener。

尝试将监听器设置为thistabLayout.SetOnTabSelectedListener(this);

另外,要获得灵感,请查看TabbedPageRenderer.cs source code

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52833863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档