这篇文章将为大家详细讲解有关android中如何使用九宫格可分页加载控件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
创新互联建站专注于特克斯网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供特克斯营销型网站建设,特克斯网站制作、特克斯网页设计、特克斯网站官网定制、小程序设计服务,打造特克斯网络公司原创品牌,更为您提供特克斯网站排名全网营销落地服务。
基本思路是viewpager+gridview,每一页viewpager视图有一个gridview,gridview加载九格。所以要保证数据的准确性。数据以List< List < T>>的形式。控件实现了高度自适应,根据控件的个数,计算控件的高度。内部的viewpager和gridview视图都以动态创建,无需新建一个xml文件,整个控件只需要一个item的布局文件。
使用方法
使用时可以先请求一个接口,需初始化数据,数据初始化需要根据总个数初始化所有数据,在每次分页加载的时候,再通过请求当页的数据,更改数据,刷新页面。
viewPager = findViewById(R.id.ninePages); //数据初始化 List> lists = new ArrayList<>(); for (int i = 0; i < 6; i++) {//页数 List
注意:viewPager.setList(lists);要在最后调用
视图控件:
public class NinePagesPagination> list = new ArrayList<>(); //已经请求过的,不在重复请求 private List
> list) { this.list = list; initView(); invalidate(); } private void initView() { adapter = new MyViewPagerAdapter(context, list,listener); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if(pageChangeListener != null){ pageChangeListener.onPageScrolled(position,positionOffset,positionOffsetPixels); } } @Override public void onPageSelected(int position) { if(pageChangeListener != null){ pageChangeListener.onPageSelected(position); } if (isPagingLoad) {//分页加载 if (isEveryRequest) {//每次都请求 adapter.setCurrentPosition(position); listener.request(position); } else {//请求过一次将不在重复请求 if (!hasAdded.contains(position)) { hasAdded.add(position); adapter.setCurrentPosition(position); listener.request(position); } } } } @Override public void onPageScrollStateChanged(int state) { if(pageChangeListener != null){ pageChangeListener.onPageScrollStateChanged(state); } } }); } //数据刷新 public void dataInvalidate(int position,List
viewpager适配器:
public class MyViewPagerAdapter> list; private LayoutInflater inflater; private MyGridViewAdapter adapter; private int currentPosition; private RequestDataListener listener; public MyViewPagerAdapter(Context context, List
> list,RequestDataListener listener) { this.context = context; this.list = list; this.listener = listener; inflater = LayoutInflater.from(context); } @Override public int getCount() { return list.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { GridView view = new GridView(context); ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); view.setLayoutParams(params); view.setTag(position); if(listener!=null && listener.gridViewColumn() != 0){ view.setNumColumns(listener.gridViewColumn()); } adapter = new MyGridViewAdapter(context, list.get(position),listener); view.setAdapter(adapter); container.addView(view); return view; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView((View) object); } @Override public int getItemPosition(@NonNull Object object) { //viewpager立即刷新页面 if (list != null && list.size() == 0) { return POSITION_NONE; } View view = (View) object; if (currentPosition == (Integer) view.getTag()) { return POSITION_NONE; } else { return POSITION_UNCHANGED; } } @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); if(adapter != null){ adapter.notifyDataSetChanged(); } } public void setCurrentPosition(int currentPosition) { this.currentPosition = currentPosition; }}
gridview适配器
public class MyGridViewAdapter
暴露的接口
public interface RequestDataListener
关于“android中如何使用九宫格可分页加载控件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。