小武:
PullToRefresh上拉加载下拉刷新GridView和ListView想必大家都了解到了:
要关联依赖包library包**加入相应的图片哦。
1.首先看主布局文件:activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.handmark.pulltorefresh.library.PullToRefreshGridView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/gridView"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:numColumns="auto_fit"
android:verticalSpacing="1dp"
android:horizontalSpacing="1dp"
android:columnWidth="100dp"
android:stretchMode="columnWidth"
android:gravity="fill"
ptr:ptrMode="both"
ptr:ptrDrawable="@drawable/icon" />
</RelativeLayout>
2.主函数
MainActivity.class 在主函数中要注意下拉刷新上拉加载的停止方法和上拉方法、下拉方法
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.TextView;
import com.example.ynf_pulltorefreash.Data1.MyData;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2;
import com.handmark.pulltorefresh.library.PullToRefreshGridView;
public class MainActivity extends Activity {
private PullToRefreshGridView gridview;
static final int MENU_SET_MODE = 0;
private ArrayList<MyData> data;
private MyBaseAdapter adapter;
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridview = (PullToRefreshGridView) findViewById(R.id.gridView);
gridview.setOnRefreshListener(new OnRefreshListener2() {
@Override
public void onPullDownToRefresh(PullToRefreshBase refreshView) {
// TODO Auto-generated method stub
MyAsyncTask task = new MyAsyncTask();
task.execute("http://m.yunifang.com/yunifang/mobile/goods/getall?random=87749&encode=ac6bd45b8f50b626a6843b294af8fed5");
}
@Override
public void onPullUpToRefresh(PullToRefreshBase refreshView) {
// TODO Auto-generated method stub
MyAsyncTask task = new MyAsyncTask();
task.execute("http://m.yunifang.com/yunifang/mobile/goods/getall?random=87749&encode=ac6bd45b8f50b626a6843b294af8fed5");
}
});
/**
* 未操作时显示的TextView,也可以用图片
* 居中
*/
TextView tv = new TextView(this);
tv.setGravity(Gravity.CENTER);
tv.setText("空视图, 请下拉或上拉来添加条目");
gridview.setEmptyView(tv);
}
class MyAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection openConnection = (HttpURLConnection) url
.openConnection();
openConnection.setConnectTimeout(5000);
openConnection.setReadTimeout(5000);
int responseCode = openConnection.getResponseCode();
if (responseCode == 200) {
InputStream inputStream = openConnection.getInputStream();
StreamUtils streamUtils = new StreamUtils();
String parseStream = streamUtils.parseSteam(inputStream);
System.out.println("-----------parseStream------------"
+ parseStream);
return parseStream;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Gson gson = new Gson();
Data1 fromJson = gson.fromJson(result, Data1.class);
System.out.println("-----------fromJson------------" + fromJson);
data = fromJson.getData();
gridview.setAdapter(adapter = new MyBaseAdapter(MainActivity.this,
data));
gridview.onRefreshComplete();//停止刷新
}
}
}
3. 适配器是这样的 MyBaseAdapter
import java.util.ArrayList;
import com.example.ynf_pulltorefreash.Data1.MyData;
import com.lidroid.xutils.BitmapUtils;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MyBaseAdapter extends BaseAdapter {
private Context context;
private ArrayList<MyData> list;
public MyBaseAdapter(Context context,ArrayList<MyData> list) {
// TODO Auto-generated constructor stub
this.context=context;
this.list=list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view = View.inflate(context, R.layout.list_base, null);
ImageView base_im = (ImageView) view.findViewById(R.id.base_im);
TextView base_name = (TextView) view.findViewById(R.id.base_name);
base_name.setText(list.get(position).goods_name);
BitmapUtils bitmapUtils=new BitmapUtils(context);
bitmapUtils.display(base_im, list.get(position).goods_img);
return view;
}
}
4.Bean实体类 Data1.class
import java.util.ArrayList;
public class Data1 {
public ArrayList<MyData> data;
public ArrayList<MyData> getData() {
return data;
}
public void setData(ArrayList<MyData> data) {
this.data = data;
}
public class MyData{
public String goods_img;
public String goods_name;
public String market_price;
public String shop_price;
public String sales_volume;
@Override
public String toString() {
return "MyData [goods_img=" + goods_img + ", goods_name="
+ goods_name + ", market_price=" + market_price
+ ", shop_price=" + shop_price + ", sales_volume="
+ sales_volume + "]";
}
}
@Override
public String toString() {
return "Data1 [data=" + data + "]";
}
}
5.工具类也写下吧 StreamUtils.class
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class StreamUtils {
public static String parseSteam(InputStream inputStream) {
try {
// 定义一个字节数组输出流
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
// 定义一个字节数组
byte[] buffer = new byte[1024];
// 定义初始长度
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
// 将读的内容,写到字节数组输出流中
arrayOutputStream.write(buffer, 0, len);
}
// 将字节输出流转成字符串
return arrayOutputStream.toString("utf-8");
// utf-8 大小写都可以,gbk 必须大写
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
6.适配器的布局 list_base.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/base_im"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/base_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
这样就可以啦,希望这个小案例可以帮助大家