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>