viewpager动态绑定数据库数据,并支持动态左右滑动
来源:互联网 发布:iphone 没有4g网络 编辑:程序博客网 时间:2024/06/11 07:24
* 分析:
* 1.模拟从数据库中取数据,数据库中有N条数据,不可能一次性全加载到viewpager中,只能动态绑定viewpager数据
* 2.从数据库取数据,放在viewpager上显示,这条数据可能是N条数据中的任意一个,所以viewpager需要支持向右滑动加载,也要支持向左滑动加载
* 3.数据分析 p---a-b-c-d-e---n,比如说前面的字母代表数据的位置,若当前显示的数据是C,在显示c的同时,左侧的b和右侧的c需预先加载出来,才可能实现viewpager向左滑或向右滑
* 4.继续比如,viewpager已经加载了a/b/c/d/e共5个页面,当页面滑动到a的时候,也就是position==0时,需要预加载p并放在集合中,但是必须在a的前面,这样a的下标会改变成1,所以我们需要再为viewpager指定下当前的item等于1,即可实现动态加载p并向左滑动
* 5.viewpager已经加载了a/b/c/d/e共5个页面,当页面滑动到e的时候,也就是position==(viewpager的size-1)时,需要预加载n并放到集合中,放在e的后面即可,这样viewpager在滑动到e的时候可以继续向右滑动
*******************所有代码(注:布局文件狠简单,1个mainactivity.xml,2个默认布局文件,1个viewpager的page文件(就一个textview)不提上来了)*******
public class MainActivity extends Activity {
private ViewPager viewpager;
private List<View> lstView;
private ViewPagerAdapter adapter;
private int CurrentPageIndex=0;//当前页面下标
private int nextDB=5;//需加载的下一条数据库数据位置
private int preDB=5;//需加载的上一条数据库数据位置
private int maxDB=10;//数据库数据最大条数
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewpager=(ViewPager)findViewById(R.id.viewpager);
initViews();//初始化数据
adapter=new ViewPagerAdapter();
viewpager.setAdapter(adapter);
viewpager.setOnPageChangeListener(new OnPagerChangeListener());
loadNextPage();
loadPrePage();
}
/**
* 初始化当前页面的数据
*/
private void initViews(){
lstView=new ArrayList<View>();
View view=LayoutInflater.from(this).inflate(R.layout.page, null);
//动态为组件赋值
TextView tvData=(TextView)view.findViewById(R.id.tv_page);
tvData.setText("第"+nextDB+"页");
lstView.add(view);
nextDB+=1;
}
/**
* 加载下一页数据
*/
private void loadNextPage(){
if(CurrentPageIndex==lstView.size()-1){
if(nextDB>(maxDB+1)){
//数据库中无数据了,不需要继续加载下一页
return;
}
View view=null;
if(nextDB==(maxDB+1)){
//刚好数据库中的最后一条也显示了,需要加载默认页面提示用户
view =LayoutInflater.from(this).inflate(R.layout.lastpage, null);
}else{
//在LstView最后追加一个页面
view =LayoutInflater.from(this).inflate(R.layout.page, null);
TextView tvData=(TextView)view.findViewById(R.id.tv_page);
tvData.setText("第"+nextDB+"页");
}
lstView.add(view);
nextDB+=1;
}
}
/**
* 加载上一页数据
*/
private void loadPrePage(){
if(CurrentPageIndex==0){
if(preDB<=0){
//数据库中无数据了,不需要继续加载上一页
return;
}
preDB-=1;
View view=null;
if(preDB==0){
//刚好数据库中的第一条也显示了,需要加载默认页面提示用户
view =LayoutInflater.from(this).inflate(R.layout.firstpage, null);
}else{
//在LstView前面追加一个页面
view =LayoutInflater.from(this).inflate(R.layout.page, null);
TextView tvData=(TextView)view.findViewById(R.id.tv_page);
tvData.setText("第"+preDB+"页");
}
lstView.add(0,view);
adapter=new ViewPagerAdapter();
viewpager.setAdapter(adapter);
//因集合下标发生了变化,当前页面的下标需要变动
CurrentPageIndex=1;
viewpager.setCurrentItem(CurrentPageIndex,false);
}
}
/**
* ViewPager滑动监听事件
*/
class OnPagerChangeListener implements OnPageChangeListener{
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int arg0) {
CurrentPageIndex=arg0;
loadNextPage();
loadPrePage();
}
}
/**
* 自定义ViewPager适配器
*/
class ViewPagerAdapter extends PagerAdapter{
@Override
public int getCount() {
return lstView.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(lstView.get(position));
return lstView.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(lstView.get(position));
}
}
}
- viewpager动态绑定数据库数据,并支持动态左右滑动
- ViewPager左右滑动页面,下面的按钮跟着动态变化
- ViewPager动态开启和禁用左右滑动功能
- Flex AdvancedDataGrid动态添加列并绑定数据库返回数据
- android左右滑动加载分页以及动态加载数据
- android左右滑动加载分页以及动态加载数据
- android左右滑动加载分页以及动态加载数据
- android左右滑动加载分页以及动态加载数据
- android左右滑动加载分页以及动态加载数据
- ViewPager左右滑动并带有圆点
- 动态添加gridView 并绑定数据
- easyui动态加载表格并绑定数据
- Android:详情界面左右滑动看更多,ViewPager动态添加Fragment,仿51job详情界面
- viewpager滑动页面动态实现
- ViewPager动态加载数据
- viewpager动态加载数据
- Android实现多页左右滑动效果,支持子view动态创建和cache
- Android实现多页左右滑动效果,支持子view动态创建和cache
- 一个2013届毕业生(踏上IT行业)的迷茫(4)
- php 三大输出函数
- KMP算法
- C# WinForm开发系列 - Socket/WCF/Rometing/Web Services
- 骑行GO:一个自行车分享网站
- viewpager动态绑定数据库数据,并支持动态左右滑动
- C语言输出函数printf("%AB", v);
- poj1021
- 8 Things Programmers Can Do at Weekends
- myeclipse遇见Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/la包冲
- getWidth() 和 getMeasuredWidth()的区别
- NFS上的svn
- 今天工作中的感想
- [Unity3d]Unity web平台 SecurityException报错解决办法