ViewPager中如何判断当前具体属于哪个Fragment的方法

如图是一个很常见的界面:
地址选择
      我们在一个Activity顶部放了一个SlidingTabLayout 底下是一个ViewPager用于切换对应的Fragment,比如我们需要一个新建联系人的按钮,最简单的做法是Fragment里面的列表下直接放一个按钮,但是如果我们的代码已经高度封装了,并且已经多处引用,我们不可能在封装里面去写,或者直接再换一个加底部按钮的再封装一次。其实最好的办法是直接在这个Activity底部去加一个按钮,然后判断当前具体在哪个Fragment里,我们最先想到的自然是instanceof这个关键字,用于判断当前属于哪个Fragment,但是FragmentPagerAdapter也没有类似getCurrentFragment这种可以直接用于判断的方法啊。
      这里介绍一个方法,FragmentPagerAdapter这个类对应的一个方法setPrimaryItem(ViewGroup container, int position, Object object)可以满足我们当前的需求。

public class ViewPagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragments;
    private List<String> mTabs;
    private Fragment mCurrentFragment;

    public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments, List<String> tabs) {
        super(fm);
        this.fragments = fragments;
        this.mTabs = tabs;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mTabs.get(position);
    }

    @Override
    public int getCount() {
        if (fragments != null) {
            return fragments.size();
        } else {
            return 0;
        }
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getItemPosition(Object object) {
        return super.getItemPosition(object);
    }

    //用于区分具体属于哪个fragment
    @Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
        mCurrentFragment = (Fragment) object;
        super.setPrimaryItem(container, position, object);
    }

    public Fragment getCurrentFragment() {
        return mCurrentFragment;
    }
}

而我们要做的就是在对应的Activity里去调用这个getCurrentFragment()结合instanceof去做判断就可以了。

/**
 * 地址管理
 */
public class AddressManagerActivity extends BaseActivity {

    @BindView(R.id.tablayout)
    SlidingTabLayout mTablayout;
    @BindView(R.id.viewpager)
    ViewPager mViewpager;

    @BindView(R.id.tv_contacts)
    TextView contacts;  //新建联系人

    private ViewPagerAdapter mAdapter;

    @Override
    protected void getBundleExtras(Intent intent) {

    }

    @Override
    protected View getLoadingTargetView() {
        return null;
    }

    @Override
    protected int getContentViewLayoutId() {
        return R.layout.activity_address_manager;
    }

    @Override
    protected void initViewAndData() {
        setToolBarTitle(getString(R.string.address));
        List<Fragment> fragments = new ArrayList<>();
        fragments.add(new RecipientFragment());
        fragments.add(new ConsignorFragment());
        List<String> tabs = new ArrayList<>();
        tabs.add(getString(R.string.recipient));
        tabs.add(getString(R.string.consignor));

        mAdapter = new ViewPagerAdapter(getSupportFragmentManager(), fragments, tabs);
        mViewpager.setAdapter(mAdapter);
        mTablayout.setViewPager(mViewpager);
    }

    @OnClick({R.id.tv_contacts})
    void click(View view) {
        Intent intent = null;
        switch (view.getId()) {
            case R.id.tv_contacts:
                if (mAdapter.getCurrentFragment() instanceof RecipientFragment) {
                    intent = new Intent(this, BuildRecipientActivity.class);
                    startActivity(intent);
                } else {
                    intent = new Intent(this, BuildConsignorActivity.class);
                    startActivity(intent);
                }
                break;
        }
    }
}

RecipientFragment是收件人列表,因为这里仅有两个Fragment所以就直接用else做判断,如果超过两个就要分开判断了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值