首先在佈局文件搭好佈局
<android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="200dp"/> <com.******.****.view.CircleIndicator android:id="@+id/indicator" android:layout_width="match_parent" android:layout_height="20dp" android:layout_below="@+id/vp" > </com.****.****.view.CircleIndicator>
private int pageCount; //界面頁數 private int pageSize = 8; //每頁item個數 private int curIndex = 0;//當前是第幾頁 private List<Model> lists;//模型數據源
private View parentView;//需要彈出的Viewprivate LayoutInflater inflater;private ViewPager vpg;private List<View> mPagerList;private CircleIndicator mCircleIndicator; 初始化相應屬性
private void initGiftsView() { mPagerList = new ArrayList<View>(); parentView = LayoutInflater.from(WatchLiveActivity.this).inflate(R.layout.layout_name, null); Window = new PopupWindow(parentView,WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.WRAP_CONTENT,true); Window.setFocusable(true); // 設置popWindow的顯示和消失動畫 Window.setAnimationStyle(R.style.popwindow_anim_up_down_style); Window.setOutsideTouchable(false); //這句是爲了防止彈出菜單獲取焦點之後,點擊activity的其他組件沒有響應 Window.setBackgroundDrawable(new BitmapDrawable()); vpg = (ViewPager) bottomGiftView.findViewById(R.id.vp); mCircleIndicator = (CircleIndicator) bottomGiftView.findViewById(R.id.indicator); vpg.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { curIndex = position; } @Override public void onPageScrollStateChanged(int state) { } }); }
//總的頁數=總數/每頁數量,並取整
if(mGiftLists == null){mGiftLists = 相應數據綁定操作; //總的頁數=總數/每頁數量,並取整 pageCount = (int) Math.ceil(mGiftLists.size() * 1.0 / pageSize); for (int i = 0; i < pageCount; i++) { //每個頁面都是inflate出一個新實例 GridView gridView = (GridView) inflater.inflate(R.layout.gridview, vpg, false); final GridViewAdapter gridViewAdapter = new GridViewAdapter(this, mGiftLists, i, pageSize); gridView.setAdapter(gridViewAdapter); mPagerList.add(gridView); gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int pos = position + curIndex * pageSize; //TODO 添加相應監聽,做出相應處理
//標記選中item、改變item背景 gridViewAdapter.setSeclection(pos); gridViewAdapter.notifyDataSetChanged(); } }); } //設置適配器 vpg.setAdapter(new ViewPagerAdapter(mPagerList)); mCircleIndicator.setViewPager(vpg);}else { showGifts();}
GridViewAdapter:
public class GridViewAdapter extends BaseAdapter{ private List<Model> mDatas; private LayoutInflater inflater; private Context mContext; /** * 頁數下標,從0開始(當前是第幾頁) */ private int curIndex; /** * 每一頁顯示的個數 */ private int pageSize; private String path; private int checkedItem = -1;
/** * 記錄選中itemposition */public void setSeclection(int position) { checkedItem = position; } public GridViewAdapter(Context context, List<Model> mDatas, int curIndex, int pageSize) { inflater = LayoutInflater.from(context); this.mContext = context; this.mDatas = mDatas; this.curIndex = curIndex; this.pageSize = pageSize; } /** * 先判斷數據集的大小是否足夠顯示滿本頁?mDatas.size() > (curIndex+1)*pageSize, * 如果夠,則直接返回每一頁顯示的最大條目個數pageSize, * 如果不夠,則有幾項返回幾,(mDatas.size() - curIndex * pageSize);(也就是最後一頁的時候就顯示剩餘item) */ @Override public int getCount() { return mDatas.size() > (curIndex + 1) * pageSize ? pageSize : (mDatas.size() - curIndex * pageSize); } @Override public Object getItem(int position) { return mDatas.get(position + curIndex * pageSize); } @Override public long getItemId(int position) { return position + curIndex * pageSize; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.item_gridview, parent, false); viewHolder = new ViewHolder(); viewHolder.your_item_view = (TextView) convertView.findViewById(R.id.item_gridview_view's id); viewHolder.bgLayout = (LinearLayout) convertView.findViewById(R.id.item_gridview_gifts_ll); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } /** * 在給View綁定顯示的數據時,計算正確的position = position + curIndex * pageSize, */ int pos = position + curIndex * pageSize; viewHolder.****.setText(mDatas.get(pos).****);
//如果checkedItem == pos 表示pos位置item被選中 if(checkedItem == pos){ viewHolder.bgLayout.setBackgroundResource(R.drawable.*******selected); }else{
viewHolder.bgLayout.setBackgroundResource(R.drawable.******normal);} return convertView; } class ViewHolder { public LinearLayout bgLayout; public TextView *****view; }}
ViewPagetAdapter:
public class GiftViewPagerAdapter extends PagerAdapter { private List<View> mViewList; public GiftViewPagerAdapter(List<View> mViewList) { this.mViewList = mViewList; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(mViewList.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(mViewList.get(position)); return (mViewList.get(position)); } @Override public int getCount() { if (mViewList == null) return 0; return mViewList.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } }