Android开发ViewPager和Fragment结合使用实现新闻类app( 三 )(基本成型的app)

本文分享了开发者如何通过结合使用ViewPager和Fragment,完成一个新闻类应用的基本形态。经过几天的优化,该应用已初具雏形,展示了在Android开发中实现滑动页面切换的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android开发ViewPager和Framgment结合使用实现新闻类app(三)




提示:因为该新闻app已经基本完成,所以下方代码量较大,请谨慎!或者从 ViewPager和Fragment结合使用实现新闻类app(一)一步步向下看!


经过几天的努力,不断地对之前的代码进行完善,终于基本完成了该新闻类app的雏形!下面和大家分享一下该成果了。先看看显示效果:








怎么样,效果还可以吧!下面就直接上代码了:

下面是显示界面的主Activity:

public class BaseActivity extends FragmentActivity {
    protected ViewPager viewPager;
    protected MyLinearLayout mly;
    protected MyOnPageChangedListener onPageChangedListener;
    
    //自定义ViewPager的标题;
    protected ArrayList<String> list = new ArrayList<String>();
    protected String[]a =new String[]{"头条","社会","国内","国际","娱乐","体育","军事","科技","财经","时尚"};
    protected List<MyFragment> fragmentList = new ArrayList<MyFragment>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        init();
    }

    private ListViewUtils listViewUtils;
    private AllNewsData allNewsData;
    private void init() {
        listViewUtils=new ListViewUtils();
        allNewsData=new AllNewsData();
        viewPager= (ViewPager) findViewById(R.id.viewPager);
        //设置ViewPager的缓存的页数的个数,缓存页面4个左右不影响加载速度,而且可以节省流量,挺不错的。
        viewPager.setOffscreenPageLimit(4);
        mly = (MyLinearLayout) findViewById(R.id.myLinearLayout);
        onPageChangedListener=new MyOnPageChangedListener(mly);
        initList();
        getFragmentList();
        getTabTitleList();
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(onPageChangedListener);
        setonLinerTitleClickListener(mly);
        setViewPagerScrollSpeed();
    }
    
    //这个方法也是在(三)中新增的,通过反射的方法,来改变setCurrentItem()后,ViewPager的滚动速度
    private void setViewPagerScrollSpeed( ) {
        try {
            Field mScroller = null;
            mScroller = ViewPager.class.getDeclaredField("mScroller");
            mScroller.setAccessible(true);
            MyOnViewPagerScroller scroller = new MyOnViewPagerScroller(viewPager.getContext());
            mScroller.set(viewPager, scroller);
        } catch (NoSuchFieldException e) {
        } catch (IllegalArgumentException e) {
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    private void initList(){
        for(int i=0;i<a.length;i++){
            list.add(a[i]);
        }
    }
    private void getTabTitleList() {
        mly.createTextView( list);
    }

    private void getFragmentList() {
        for (int i = 0; i < list.size(); i++) {
            fragmentList.add(MyFragment.getnewInstance(i));
        }
    }

    //ViewPager的适配器
    private FragmentPagerAdapter adapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
        @Override
        public android.support.v4.app.Fragment getItem(int position) {
            return fragmentList.get(position);
        }

        @Override
        public int getCount() {
            return fragmentList.size();
        }
    };

    private int currentPosition;
    //为自定义的标题栏中的TextView绑定监听事件。
    private void setonLinerTitleClickListener(final MyLinearLayout ly){
        for( int i=0;i<ly.getChildCount();i++){
            currentPosition=i;
            final TextView tv= (TextView) ly.getChildAt(currentPosition);
            tv.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.d("onclick", currentPosition + "");
                    viewPager.setCurrentItem(ly.a.get(tv),true);
                }
            });

        }

    }

}

下面是每个新闻列表的Fragment:

public class MyFragment extends Fragment {

    //该Fragment就是显示新闻列表的Fragment
    private int position;
    private MyFragment(int position) {
        this.position = position;
    }
    public static MyFragment getnewInstance(int position) {
        retu
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值