首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

GridView分页加载-给GridView添FooterView

2013-04-09 
GridView分页加载--给GridView加FooterView在项目开发中发现gridview不像listview一样可以加个footerview

GridView分页加载--给GridView加FooterView

在项目开发中发现gridview不像listview一样可以加个footerview来显示加载状态。为达到像listview一样的加载效果,可以给gridview伪造一个footerview.核心思想是在绑定的list末加个null值,在getview的时候判断当前adapter是否要加footerview.

?

1、初始化GridView.在GridView滑到底时加载数据

private void initGridView() {adapter = new ItemAdapter(MainActivity.this, list);adapter.setOnFooterViewClickListener(MainActivity.this);gridview.setAdapter(adapter);gridview.setOnScrollListener(new OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {if (view.getLastVisiblePosition() == (view.getCount() - 1)&& !isLoadFinished&& adapter.getFooterView().getStatus() != FooterView.LOADING) {loadMoreData();}}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {}});}

?2、分页加载完数据处理

@Overridepublic void onCompletedSucceed(List<String> l) {// 在添加数据之前删除最后的伪造itemif (adapter.isFooterViewEnable()) {list.remove(list.get(list.size() - 1));}// 分页加载if (l.size() < PAGE_SIZE || list.size() + l.size() == COUNT) {// 如果加载出来的数目小于指定条数,可视为已全部加载完成isLoadFinished = true;list.addAll(l);adapter.setFootreViewEnable(false);adapter.notifyDataSetChanged();} else {// 还有数据可加载。list.addAll(l);// 伪造一个空项来构造一个footerview;list.add(null);adapter.setFootreViewEnable(true);adapter.notifyDataSetChanged();}}

?3、adapter中的处理

?

public class ItemAdapter extends BaseAdapter {private List<String> mList = new ArrayList<String>();private Context mContext;private FooterView footerView;private boolean footerViewEnable = false; private OnClickListener ml;public ItemAdapter(Context context, List<String> list) {if (list != null) {this.mList = list;}this.mContext = context;}public boolean isFooterViewEnable() {return footerViewEnable;}/** * 存放列表项控件句柄 */public static class ViewHolder {public TextView itemview;}public void setFootreViewEnable(boolean enable) {footerViewEnable = enable;}public void setOnFooterViewClickListener(OnClickListener l) {ml = l;}private int getDisplayWidth(Activity activity) {Display display = activity.getWindowManager().getDefaultDisplay();int width = display.getWidth();return width;}@Overridepublic View getView(final int i, View convertView, ViewGroup parent) {// footerViewEnable 判断当前是否要加footerviewif (footerViewEnable && i == mList.size() - 1) {if (footerView == null) {footerView = new FooterView(parent.getContext());// 若 gridview是多列的,footerview的宽度要设置成固定数值,不能是fill_parentGridView.LayoutParams pl = new GridView.LayoutParams(getDisplayWidth((Activity) mContext),LayoutParams.WRAP_CONTENT);footerView.setLayoutParams(pl);footerView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (ml != null) {ml.onClick(v);}}});}setFooterViewStatus(FooterView.MORE);return footerView;}final ViewHolder holder;// 当convertView是footerView时要重新加载view.if (convertView == null|| (convertView != null && convertView == footerView)) {convertView = LayoutInflater.from(mContext).inflate(R.layout.textview, parent, false);holder = new ViewHolder();holder.itemview = (TextView) convertView.findViewById(R.id.textview);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.itemview.setText("item" + mList.get(i));return convertView;}public FooterView getFooterView() {return footerView;}public void setFooterViewStatus(int status) {if (footerView != null) {footerView.setStatus(status);}}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn mList.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}}

?完整demo地址:https://github.com/hyhe/gridview-with-footerview.git

热点排行