为 FragmentTabhost 添加 tab 点击事件,在页面跳转之前
利用 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地址:https://github.com/Wing-Li/FragmentTabhost
注意:
在 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>
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 时光·李记
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果