当使用holoeverywhere滑块插件时,如何从活动中获取当前可见的片段?

Meh*_*nai 2 android android-holo-everywhere

我想知道如何在holoeverywhere中执行这些操作:

将滑块插件与tabber结合使用时,可以参考活动中当前可见且活动的片段.

从活动/其他片段中获取对TabsTabsSwipeFragment的引用,并动态禁用/启用滑动.

Tom*_*Tom 7

为了获得当前活跃且可见的片段,我理解HoloEverywhere使用Android的支持库.尝试类似" 获取当前显示的片段 "的内容.

public Fragment getActiveFragment() {
    if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
        return null;
    }
    String tag = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1).getName();
    return getSupportFragmentManager().findFragmentByTag(tag);
}
Run Code Online (Sandbox Code Playgroud)

也就是说,当使用ActionBar标签时,这可能会变得复杂,因为在任何给定时间都可以看到两个或更多个碎片(即在两者之间滑动).您可能希望提供Fragments标记并通过查询isVisible方法手动搜索它们.

现在禁用滑动,我不知道TabsTabsSwipeFragment是什么,但你可以通过从Fragment管理器查询它们的标签来获取对任何Fragment的引用,如果你真的想通过循环遍历所有Fragments并比较class(Object.getClass).禁用ViewPager可以通过类似于" 如何通过在ViewPager中用手指滑动禁用分页但仍能够以编程方式滑动? "来完成.

package com.yourcompany;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;

public class SwipeableViewPager extends ViewPager {

    private boolean swipeable = true;

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

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

    public void setSwipeable(boolean swipe) {
        this.swipeable = swipe;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        return (swipeable) super.onInterceptTouchEvent(event) : false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return (swipeable) super.onTouchEvent(event) : false;
    }
}
Run Code Online (Sandbox Code Playgroud)