pageView使用(二)

pageView使用(二)

注意看实现OnPageChangeListener的注释

mainActivity.java


import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.PagerTitleStrip;
import androidx.viewpager.widget.ViewPager;

import java.util.ArrayList;
import java.util.List;

import fengxing.primer.textlink.R;

public class Viewpage2Activity extends AppCompatActivity {

    private ViewPager vp_change_page_2;
    private PagerTitleStrip pts_page_title_2;//每一页标题
    private List<View> layoutList;//每一页的布局
    private List<String> titleList;//标题
    private LayoutInflater inflater = null;

    private static final String TAG ="Viewpage2Activity";
    private MyPageAdapter adapter = new MyPageAdapter();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_viewpage2);

        initView();
    }

    private void initView() {
        vp_change_page_2 = findViewById(R.id.vp_change_page_2);
        pts_page_title_2 = findViewById(R.id.pts_page_title_2);

        //加载布局
        inflater = LayoutInflater.from(Viewpage2Activity.this);
        //第一次被加载的布局对象
        View tab = inflater.inflate(R.layout.tab,null);

        layoutList = new ArrayList<View>();
        layoutList.add(tab);

        titleList = new ArrayList<String>();
        titleList.add("标题一");

        vp_change_page_2.setAdapter(adapter);
        //页面改变监听事件
        vp_change_page_2.addOnPageChangeListener(new MyOnPageChangeListener());
    }

    private class MyPageAdapter extends PagerAdapter {

        /**
         * 初始化每个页面
         * @param container
         * @param position
         * @return
         */
        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, int position) {
            //获得页面(强转)
            ((ViewPager)container).addView(layoutList.get(position));
            return layoutList.get(position);
        }

        /**
         * 销毁页面
         * @param container
         * @param position
         * @param object
         */
        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
            //注释调用父类的方法,不然在滑动过程中报错
            //super.destroyItem(container, position, object);
            ((ViewPager)container).removeView(layoutList.get(position));
        }

        /**
         * 设置页面标题
         * @param position
         * @return
         */
        @Nullable
        @Override
        public CharSequence getPageTitle(int position) {
            return titleList.get(position);
        }

        /**
         * 返回当前集合的页面数量
         * @return
         */
        @Override
        public int getCount() {
            return layoutList.size();
        }

        /**
         * 判断当前对象是否是同一个对象
         * @param view
         * @param object
         * @return
         */
        @Override
        public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
            return view==object;
        }
    }

    private class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {

        /**
         * 当前页面被滚动
         * @param position
         * @param positionOffset
         * @param positionOffsetPixels
         */
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            Log.d(TAG, "onPageScrolled: "+position+"  :  "+positionOffset+"  :  "+positionOffsetPixels);
            /**
             * 不合适在该方法中执行耗时操作(比如请求网络数据)
             * 为什么呢?:打印日志查看调用详情
             */
        }

        /**
         * 当前页面被选中
         * @param position
         */
        @Override
        public void onPageSelected(int position) {
            Log.d(TAG, "onPageSelected: "+position);
        }

        /**
         * 状态发生改变
         * @param state
         */
        @Override
        public void onPageScrollStateChanged(int state) {
            Log.d(TAG, "onPageScrollStateChanged: "+state);

            /**
             * 界面加载,一般在此执行
             */
            View view = inflater.inflate(R.layout.tab,null);
            layoutList.add(view);
            titleList.add("hello title");

            //刷新数据
            adapter.notifyDataSetChanged();

        }
    }
}

layout.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!--添加网络数据: 图文混排   本地数据;-->

    <ProgressBar
        android:layout_marginTop="100dp"
        android:layout_gravity="center"
        android:layout_width="50dp"
        android:layout_height="50dp">
    </ProgressBar>


</LinearLayout>

在Flutter中,可以通过将TabBar和PageView组合在一起来创建具有选项卡的页面滚动视图。下面是一个简单的示例,演示如何使用TabBar和PageView来创建具有选项卡的页面滚动视图。 首先,我们需要在代码中导入必要的库: ```dart import 'package:flutter/material.dart'; ``` 然后,我们可以创建一个StatefulWidget,其中包含一个TabBar和一个PageView。在这个示例中,我们将创建一个具有三个选项卡的滚动视图,每个选项卡都包含一个文本控件。 ```dart class MyTabbedPage extends StatefulWidget { @override _MyTabbedPageState createState() => _MyTabbedPageState(); } class _MyTabbedPageState extends State<MyTabbedPage> { final List<Tab> myTabs = <Tab>[ Tab(text: 'Tab 1'), Tab(text: 'Tab 2'), Tab(text: 'Tab 3'), ]; @override Widget build(BuildContext context) { return DefaultTabController( length: myTabs.length, child: Scaffold( appBar: AppBar( title: Text('My Tabbed Page'), bottom: TabBar( tabs: myTabs, ), ), body: TabBarView( children: myTabs.map((Tab tab) { return Center(child: Text(tab.text)); }).toList(), ), ), ); } } ``` 在这个示例中,我们首先定义了一个包含三个选项卡的TabBar。然后,我们使用DefaultTabController来指定选项卡的数量,并将TabBar包装在AppBar中。最后,我们使用TabBarView来构建页面视图,并将一个文本控件放在每个选项卡中间。 现在,我们可以将MyTabbedPage添加到我们的应用程序中: ```dart void main() { runApp(MaterialApp( title: 'My App', home: MyTabbedPage(), )); } ``` 这样,我们就可以创建一个具有选项卡的页面滚动视图,用户可以在不同的选项卡之间滚动并查看不同的页面内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值