PullToRefresh方式GridView刷新加载数据



 

  <span style="color:#FF0000;"> 首先导入PullRefreshLibry类库,注意复制到本地工作空间,注意V4的冲突</span>
                    然后就是直接上代码了:



                                          导入了类库之后,引用自定义的GridView 控件



<span style="color:#3366FF;">    <com.handmark.pulltorefresh.library.PullToRefreshGridView
        android:id="@+id/gv_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:numColumns="3"
        android:layout_weight="12"/></span>


                                
                                         然后在主Activity中找到此view


   

<span style="color:#6633FF;">	// 找对象
		gv_view = (PullToRefreshGridView) findViewById(R.id.gv_view);

         //将此gridView设置为可以刷新
               GridView mGridView = gv_view.getRefreshableView();</span>

                                     
<span style="color:#3366FF;">// 下拉刷新
		gv_view.setOnRefreshListener(new OnRefreshListener<GridView>() {

			private String url1;

			@Override
			public void onRefresh(PullToRefreshBase<GridView> refreshView) {

				String label = DateUtils.formatDateTime(
						getApplicationContext(), System.currentTimeMillis(),
						DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE
								| DateUtils.FORMAT_ABBREV_ALL);
				refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);// 3.刷新界面处理代理,显示新的时间

				url1 = "http://apis.juhe.cn/goodbook/query?key=9d6ef8c31647a206e05fcaff70527182&catalog_id=242&pn=10&rn=10";
				getJson(flag2, url1);
			}
		});</span>


<span style="color:#3366FF;">	// 上拉加载
		gv_view.setOnLastItemVisibleListener(new OnLastItemVisibleListener() {

			private String url2;

			@Override
			public void onLastItemVisible() {
				url2 = "http://apis.juhe.cn/goodbook/query?key=9d6ef8c31647a206e05fcaff70527182&catalog_id=242&pn=20&rn=10";
				Toast.makeText(MainActivity.this, "正在加载", 0).show();
				// new MyAsync().onPostExecute(url2);
				getJson(!flag2, url2);

			}
		});
	}





</span><pre name="code" class="java">	// 异步加载
	class MyAsync extends AsyncTask<String, Integer, String> {

		@Override
		protected String doInBackground(String... params) {
			try {
				Thread.sleep(3000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			return null;
		}

		@Override
		protected void onPostExecute(String result) {
			getJson(flag2, url);
			super.onPostExecute(result);
		}
	}

 


// 获取数据
	private void getJson(final Boolean str, String url) {
		HttpUtils utils = new HttpUtils();
		utils.configResponseTextCharset("utf-8");
		utils.send(HttpMethod.POST, url, new RequestCallBack<String>() {

			private LinkedList<MyData> list2;

			@Override
			public void onFailure(HttpException arg0, String arg1) {
			}

			@Override
			public void onSuccess(ResponseInfo<String> arg0) {
				String json = arg0.result;
				Log.e("Main", json);
				Gson gson = new Gson();
				Bean bean = gson.fromJson(json, Bean.class);
				// 证明是第一次请求网络
				if (flag2) {
					list = bean.result.data;
					adapter = new MyAdapter(MainActivity.this, list);
					gv_view.setAdapter(adapter);
					gv_view.onRefreshComplete();
					flag2 = false;
				} else {
					// 执行下拉刷新或者上拉加载的时候,进入此判断。通过判断boolean的值来判断是什么操作。

					if (str) {
						// 上拉加载,加载出的数据在数据的底部。
						list2 = bean.result.data;
						for (MyData myData : list2) {
							list.add(myData);
						}
						gv_view.onRefreshComplete();
					} else {
						// 下拉刷新,刷新出来的数据在数据的顶部,之前的数据还在。
						list2 = bean.result.data;
						for (MyData myData : list2) {
							list.addFirst(myData);
						}
						gv_view.onRefreshComplete();
					}
					adapter.notifyDataSetChanged();
				}
			}
		});
	}



  注: 这里的falg 是一个Boolean值,默认为True  听过这个值来判断是否是第一次请求数据,如果是第一次,使用正常的Url 来请求,如果执行了刷新或者加载的方法,证明不    是       第一次请求数据,那么久进入到了else判断里面,然后判断本次请求是刷新还是加载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过适配器数据GridView中,需要完成以下步骤: 1.创建一个适配器类,继承自BaseAdapter或其子类,实现相应的方法,例如getCount()、getItem()、getItemId()和getView()等。 2.在Activity或Fragment中实例化GridView,并设置适配器,例如gridView.setAdapter(adapter)。 3.在适配器的getView()方法中,将数据绑定到GridView的每个网格上。 例如,以下是一个简单的示例: ``` public class MyAdapter extends BaseAdapter { private Context mContext; private List<String> mDataList; public MyAdapter(Context context, List<String> dataList) { mContext = context; mDataList = dataList; } @Override public int getCount() { return mDataList.size(); } @Override public Object getItem(int position) { return mDataList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.grid_item_layout, parent, false); holder = new ViewHolder(); holder.mImageView = convertView.findViewById(R.id.image_view); holder.mTextView = convertView.findViewById(R.id.text_view); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } String data = mDataList.get(position); holder.mTextView.setText(data); holder.mImageView.setImageResource(R.drawable.icon); return convertView; } private static class ViewHolder { ImageView mImageView; TextView mTextView; } } // 在Activity或Fragment中 GridView gridView = findViewById(R.id.grid_view); List<String> dataList = new ArrayList<>(); dataList.add("Item 1"); dataList.add("Item 2"); dataList.add("Item 3"); MyAdapter adapter = new MyAdapter(this, dataList); gridView.setAdapter(adapter); ``` 在这个示例中,MyAdapter是自定义的适配器类,用于将数据列表中的每个元素绑定到GridView的每个网格上。getView()方法中,先通过ViewHolder模式缓存了每个网格的视图控件,然后将数据绑定到这些控件上,最后返回视图。在Activity或Fragment中,实例化GridView并设置适配器,最终将数据显示在GridView中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值