为 FragmentTabhost 添加 tab 点击事件,在页面跳转之前

本文介绍如何通过自定义FragmentTabHost类实现底部切换按钮的点击事件,使其不仅限于页面切换,还能执行跳转至其他应用等操作。文章提供了代码示例,并分享了一个Gradle库简化开发流程。

如果本文帮助到你,本人不胜荣幸,如果浪费了你的时间,本人深感抱歉。 希望用最简单的大白话来帮助那些像我一样的人。如果有什么错误,请一定指出,以免误导大家、也误导我。 本文来自:www.jianshu.com/u/320f9e8f7… 感谢您的关注。

利用 FragmentTabhost 来实现页面的切换,是我们经常用到的功能。最近有这么一个需求,底部的切换按钮中的一个点击要跳转到另一个APP,而不是跳转到本APP页面。 如下图:


调查了之后,发现 FragmentTabhost 只能 onTabChanged 切换,在切换之前并没有提供相应的点击事件。 然后就去看了看源码,源码也是挺简单的,随即自己写了一个类继承 FragmentTabhost ,在 onTabChanged 执行操作之前,写一个点击事件的监听。 代码非常的简单:

创建一个 FragmentTabHost 类:

public class FragmentTabHost extends android.support.v4.app.FragmentTabHost {

    private OnTabClickListener mOnTabClickListener = null;
    private boolean isClickLinstener = false;


    public FragmentTabHost(Context context) {
        super(context);
    }


    public FragmentTabHost(Context context, AttributeSet attrs) {
        super(context, attrs);
    }


    @Override
    public void onTabChanged(String tabId) {
        if (null != mOnTabClickListener) {
            isClickLinstener = mOnTabClickListener.onTabClick(tabId);
        }

        if (!isClickLinstener) {
            super.onTabChanged(tabId);
        }
    }


    public void setOnTabClickListener(OnTabClickListener mOnTabClickListener) {
        this.mOnTabClickListener = mOnTabClickListener;
    }


    public interface OnTabClickListener {
        /**
         * If you set the click event, according to the return value of the click event to determine whether to continue to perform
         *
         * @param tabId tabId
         * @return true:Interception event;false:Superclass continue
         */
        boolean onTabClick(String tabId);
    }
}
复制代码

然后,在是使用 FragmentTabHost 时,要用我们重写的这个类。


不想自己重写的话,可以引入一个 Gradle 库:

dependencies {
    compile 'com.lyl.tabhost:tabhost:1.0.0'
}
复制代码

然后使用 com.lyl.tabhost.FragmentTabHost 即可。 Demo地址:github.com/Wing-Li/Fra…


注意: 在 activity_main.xml 中写 FragmentTabHost 控件时,设定的资源id只能是 @android:id/tabhost 。 例:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/activity_main"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/main_content"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

    <com.lyl.tabhost.FragmentTabHost
        android:id="@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </com.lyl.tabhost.FragmentTabHost>
</LinearLayout>
复制代码

项目地址为: github.com/Wing-Li/Fra…

转载于:https://juejin.im/post/5c00cbf4f265da61193b90b5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值