翔翔财富的财富超市页面开发:ViewPager、Fragment 与适配器的实践

配资网 阅读: 2024-10-11
后台-插件-广告管理-内容页头部广告(手机)

 

Hey,咱们Android里头,Fragment和ViewPager搭配用特别带感,就像能翻页一样。可这俩玩意儿放一块儿,还真挺头疼的,特别是说起嵌套Fragment。这篇文儿得从头到尾告诉你,怎么自己动手做FragmentStatePagerAdapter,再把它弄到ViewPager上去。顺便也聊聊可能会碰到的那些小问题,怎么解决。

咱们来聊聊FragmentStatePagerAdapter怎么个简单法儿。

滑动安卓页,咱一般都用ViewPager和PagerAdapter。FragmentStatePagerAdapter是PagerAdapter的一种,主要负责弄Fragment的出生和消亡。用这个家伙,别忘了写getItem和getCount这些关键代码,才能让ViewPager正确地加载和移除Fragment。

弄开发,记得在Fragment里面用ViewPager,还有得小心点用FragmentManager。要是activity里头,咱们就直接用getFragmentManager或者getSupportFragmentManager。但如果是Fragment里头还有Fragment,就得用getChildFragmentManager,这个能更好地管理嵌套Fragment,防止内存出乱子。

@Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mSlidingTabAdapter = new SlidingTabAdapter(this); //new一个自定义的ViewPager适配器
        mViewPager.setAdapter(mSlidingTabAdapter); //为ViewPager设置适配器
        mViewPager.setOffscreenPageLimit(2); //指定ViewPager加载的页数
        mViewPager.setCurrentItem(0); //设置当前的Fragment
        restartLoader();
    }
    @Override
    public void onChangeFragment(int checkedId) { //这是回调函数,在其他activit设置当前的Fragment
        if (checkedId==R.id.weekly_earn){
            mViewPager.setCurrentItem(TAB_WEEKLY_EARN);
        }else if (checkedId==R.id.monthly_earn){
            mViewPager.setCurrentItem(TAB_MONTHLY_EARN);
        }
    }
    public class SlidingTabAdapter extends FragmentStatePagerAdapter { //自定义FragmentStatePagerAdapter类,基本只需重写下面三个方法
        public SlidingTabAdapter(Fragment fm) {
            super(fm.getChildFragmentManager()); //注意此处!!由于是在Fragment中使用FragmentManager,只能使用getChildFragmentManager
        }
        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case TAB_WEEKLY_EARN:
                    if (weeklyEarnFragment == null)
                        weeklyEarnFragment = WeeklyEarnFragment.newInstance();
                    return weeklyEarnFragment;
                case TAB_MONTHLY_EARN:
                    if (monthlyEarnFragment == null) monthlyEarnFragment = MonthlyEarnFragment.newInstance();
                    return monthlyEarnFragment;
            }
            return new Fragment();
        }
        @Override
        public int getCount() { //ViewPager中item数量
            return 2;
        }
    }

二、嵌套Fragment中的ViewPager问题

用ViewPager套Fragment挺头疼的,比如我们HomeActivity里的那四个滑来滑去的Fragment,现在我想在其中一个Fragment(比如说是_WealthMarketFragment)里面再套一个ViewPager,然后那个里面也放俩Fragment。

翔翔财富_财翔科技_财翔科技有限公司

这搞得是啥事儿,加了那ViewPager后问题就来了。之前咱们在HomeActivity下面有个叫_WealthMarketFragment的子Fragment,这下加进去了,结果多了两个Fragment。现在HomeActivity里能滑动的Fragment有五个了,可不是我们想要的四个。还打算在ToolBar上用那个复选框来切换那些Fragment来着。

三、禁止ViewPager滑动的尝试

要想解决这个难缠的问题,咱们得先锁住ViewPager不让它乱滑。咱们得动手调整ViewPager和相关代码。但这样一来,虽然_WealthMarketFragment不能滑动了,可从_WealthMarketFragment跳到HomeActivity里的其他Fragment就变成了个大麻烦。最大的问题是,_WealthMarketFragment不能滑,用户就只能傻傻地切换Fragment了。

四、重新思考解决方案

public class CustomViewPager extends ViewPager {
    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
//重写以下两个方法,使触摸没有反应
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return false;
    }
    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        return false;
    }
}

咱们得好好想想怎么把这事儿搞定。你看,WealthMarketFragment里的那俩标签页里的东西挺像的,干嘛不去根据标签页的ID来要两次数据?这样一来,我们就能在WealthMarketFragment里直接用标签页ID来加载数据,不用在ViewPager里来回切换Fragment了。

咱在WealthMarketFragment里加上个FrameLayout布局得了。

要使这个方案行得通,咱得在WealthMarketFragment的界面加个FrameLayout。这东西就是个容器,让ChildFragment有个归属地。这样一来,我们可以随意给WealthMarketFragment加不同ID的Fragment,不用只看ViewPager。

财翔科技有限公司_财翔科技_翔翔财富

六、优化用户体验

搞开发,得把用户体验放在心上。咱们不光把Fragment里嵌ViewPager滑动不顺畅的问题解决了,换Fragment的操作感也好了不少。现在用户点一下ToolBar上的勾,就能直接切换WealthMarketFragment的内容,不用再手动滑动了,操作简单多了。

七、总结与反思

弄安卓开发,よくFragmentとViewPager使えるけど、少し難しいやん。ここでは、Fragment内でFragmentStatePagerAdapterを作る方法と、ViewPagerに適切なアダプターを設定する方法を教えるし、ナビゲーションしちゃう時のトラブルにも対処法教えてるよ。

聊起这个开发期,咱可得精心琢磨功能细节,同时得注意用户体验。只要设计没问题,持续优化跟上,用户就能享受到更舒心的服务。

结尾问题

<frameLayout
        android:id="@+id/fragment_parent"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    

搞Android,Fragment和ViewPager遇到啥棘手的问题了吗?怎么克服的?快来评论区分享你的妙招,大家互相学习学习,互相帮一下!

本文 融资融券杠杆炒股 原创,转载保留链接!网址:http://www.gdjylvs.com/zmt/373.html

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索