package com.zt.test.widget;
import java.util.ArrayList;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
public abstract class AbsMyPagerAdapter extends PagerAdapter{
public static final int NUM_PER_PAGE = 9;
// private LayoutInflater mLayoutInflater;
//mPageTotal 是从1开始的,第一页时mPageTotal=1;
private int mPageTotal = 0;
//mViewTotal是保存container所加的页的数量
private int mViewTotal = 0;
// mCurPage只由这里来控制被改变,从0 开始
private int mCurPage = 0;
private View mContainerView = null;
private Context mContext = null;
private ArrayList<?> mDataList;
private ArrayList<MyGridView> mGridViewList;
private IOnItemClickListener mIOnItemClickListener = null;
public static final String TAG = "AbsMyPagerAdapter";
public AbsMyPagerAdapter(Context context, ArrayList<?> list, IOnItemClickListener listener) {
mContext = context;
mDataList = list;
mIOnItemClickListener = listener;
Print.d(TAG, "######## AbsMyPagerAdapter #########");
mGridViewList = new ArrayList<MyGridView>();
}
private IOnPageNotExistedListener mIOnPageNotExistedListener = null;
public void setOnPageNotExistedListener(IOnPageNotExistedListener l) {
mIOnPageNotExistedListener = l;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
Print.d(TAG, "AAAAAA // getCount() //mPageTotal = " + mPageTotal);
this.mPageTotal = getGridViewPos(mDataList.size());
return this.mPageTotal;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1)
{
// TODO Auto-generated method stub
return arg0 == ((View)arg1);
}
/**
* 只保存当前两个View缓存,其他的会删掉
* 比如,翻到第三页的时候,第一页就开始删掉了
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
Print.d(TAG, "AAAAAA // destroyItem()");
Print.d(TAG, "+++++ destroyItem ++++++ container = " + container);
// container.removeViewInLayout((View)object);
// if(mRoomList.size() < (mPageTotal - 1) * (NUM_PER_PAGE)) {
// mGridViewList.remove(mGridViewList.size() - 1);
// Print.d(TAG, "+++++ destroyItem ++++++");
// }
}
@Override
public Object instantiateItem(View container, int position) {
// TODO Auto-generated method stub
mContainerView = container;
Print.w(TAG, "instantiateItem mGridViewList.size = " + mGridViewList.size() + "//position = " + position);
Print.d(TAG, "container = " + container);
MyGridView mgv;
if(position >= this.mGridViewList.size())
{
mViewTotal++;
Print.d(TAG, "load.....");
Print.d(TAG, "here position = " + position);
// mgv = new MyGridView(mContext, mRoomList, mIOnItemClickListener, position * NUM_PER_PAGE);
mgv = getView(mDataList, position * NUM_PER_PAGE);
mGridViewList.add(mgv);
mgv.getViewParent().setTag(mViewTotal);
// container.findViewWithTag(tag);
((ViewPager) container).addView(mgv.getViewParent());
return mgv.getViewParent();
} else {
Print.d(TAG, "Not load..... position = " + position + "#mGridViewList.size = " +mGridViewList.size());
mGridViewList.get(position).getAbsMyGridViewAdapter().notifyDataSetChanged();
return mGridViewList.get(position).getViewParent();
}
}
/**
* Abstract. 用户根据布局自己生成一个MyGridView。
* @param position
* @return
*/
public abstract MyGridView getView(ArrayList<?> dataList, int position);
/**
* See IOnPageNotExistedListener
*/
private void moveToLastPage() {
Print.d(TAG, "MoveToLastPage() // ###############");
if(mIOnPageNotExistedListener != null) {
mIOnPageNotExistedListener.moveToLastPage();
}
}
/**
* 绕过Adapter自己手动改变GridView,用于手动翻页的时候改变所翻到的页的所有重绘。
* @param pos from 1 to mGridViewList.size
*/
public void notifyGridViewChange(final int curPage) {
Print.w(TAG, "notifyGridViewChange() // curPage = " + curPage);
mCurPage = curPage;
if(curPage < mGridViewList.size() && curPage > 0) {
mGridViewList.get(curPage).getAbsMyGridViewAdapter().notifyDataSetChanged();
} else {
Print.e(TAG, "notifyGridViewChange() // curPage = " + curPage);
}
}
/**
* 数据更新当前页所在的某一项
* @param index index是其在mDataList中的位置, from 0 to (mDataList.size() - 1)
*/
public void notifyDataListChangePos(int index) {
Print.w(TAG, "notifyDataListChangePos() // index =10 " + index + "// mDataList.size =11 " + mDataList.size());
if(index < 0 || index > mDataList.size()) {
Print.e(TAG, "error index = " + index + " // mDataList.size = " + mDataList.size());
return;
}
int gridViewIndex = getGridViewPos(index);
Print.d(TAG, "notifyDataListChangePos() // gridViewIndex =2 " + gridViewIndex);
if(gridViewIndex <= mCurPage + 1) {
mGridViewList.get(gridViewIndex - 1).getAbsMyGridViewAdapter().notifyDataSetChanged(index);
}
}
/**
* 只要是index在当前页或之前,我们就必须刷新当前页的整个gridView!!不然用户点击所选中的item将与所看到的item情况不一致。
* 当数据某一项被删除时,有三种情况,
* 第一种index < 此gridview的startpos,不刷新,需要刷新,不然用户点击了item之后,与所看到的item数据不一致
* 第二种index >= 此gridView的startpos && index < 下一个gridview的startpos,目前是刷新整个gridview,后期优化可以只刷新当前gridview的index以后的几项
* 第三种index >= 下一个gridview的startpos,不刷新
* @param index dataList index
*/
public void notifyDataListRemovePos(int index) {
if(mCurPage > 0) {
int curPageStart = mCurPage * 9;
if(curPageStart > mDataList.size() - 1) {
Print.d(TAG, "notifyDataListRemovePos() // index = " + index);
moveToLastPage();
}
Print.d(TAG, "notifyDataListRemovePos() // curPageStart = " + curPageStart + " // mDataList.size = " + mDataList.size());
}
int gridViewIndex = getGridViewPos(index);
Print.d(TAG, "notifyDataListRemovePos() // mGridViewList.size = " + mGridViewList.size() + " // mCurPage = " + mCurPage
+ " // gridViewIndex = " +gridViewIndex + " // index = " + index + "// mDataList.size = " + mDataList.size());
if(index < 0) {
Print.e(TAG, "notifyDataListRemovePos() here 1");
return;
}
if(mCurPage + 1 > mGridViewList.size()) {
Print.e(TAG, "notifyDataListRemovePos() here 2. I don't know how to process it!!!");
}
if(gridViewIndex > mGridViewList.size()) {
Print.e(TAG, "notifyDataListRemovePos() here 3");
} else if(gridViewIndex <= mCurPage + 1) {
Print.d(TAG, "notifyDataListRemovePos() here 4");
mGridViewList.get(mCurPage).getAbsMyGridViewAdapter().notifyDataSetChanged();
} else {
// mGridViewList.get(gridViewIndex - 1).getAbsMyGridViewAdapter().notifyDataSetChanged();
Print.e(TAG, "notifyDataListRemovePos() here 6");
}
}
private int getGridViewPos(int index) {
return (index % NUM_PER_PAGE) >= 0 ? (index / NUM_PER_PAGE + 1) : (index / NUM_PER_PAGE);
}
/**
* 方法返回none没效果
*/
@Override
public int getItemPosition(Object object) {
Print.d(TAG, "getItemPosition ");
Print.d(TAG, "AAAAAA // getItemPosition()");
int position = super.getItemPosition(object);
return position;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
TestWidget.tar.gz (53个子文件)
TestWidget
AndroidManifest.xml 712B
res
layout
data_view_item.xml 786B
main.xml 621B
data_list_view_my_gridview.xml 965B
drawable-ldpi
ic_launcher.png 2KB
drawable-mdpi
ic_launcher.png 3KB
drawable-hdpi
ic_launcher.png 4KB
values
strings.xml 180B
proguard.cfg 1KB
src
com
zt
test
TestData.java 531B
TestListView.java 4KB
widget
AbsMyGridViewAdapter.java 6KB
AbsMyPagerAdapter.java 7KB
MyViewPager.java 2KB
IMyView.java 103B
MyGridView.java 2KB
IOnPageNotExistedListener.java 344B
Print.java 459B
IOnItemClickListener.java 244B
TestWidgetActivity.java 1KB
bin
classes
com
zt
test
TestListView$3.class 2KB
widget
AbsMyGridViewAdapter.class 4KB
AbsMyPagerAdapter.class 6KB
IOnItemClickListener.class 169B
IMyView.class 156B
MyGridView.class 3KB
MyViewPager$1.class 846B
MyGridView$1.class 1KB
MyViewPager.class 3KB
Print.class 916B
IOnPageNotExistedListener.class 181B
TestListView$2.class 2KB
TestWidgetActivity.class 1KB
R.class 482B
TestListView.class 4KB
R$layout.class 461B
R$attr.class 319B
TestData.class 1024B
R$id.class 496B
R$string.class 406B
R$drawable.class 386B
TestListView$1.class 990B
res
drawable-ldpi
ic_launcher.png 2KB
drawable-mdpi
ic_launcher.png 2KB
drawable-hdpi
ic_launcher.png 4KB
classes.dex 325KB
TestWidget.apk 148KB
resources.ap_ 12KB
.classpath 421B
assets
project.properties 360B
libs
android-support-v4.jar 330KB
.project 813B
gen
com
zt
test
R.java 1KB
共 53 条
- 1
跟随内心
- 粉丝: 349
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页