先导个包:
由于截图的问题,并没有显示出要走的步骤,应走倒数第三个(Open Module Settings)点击后:
接下来就看主布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
tools:context=".MainActivity"
android:orientation="vertical">
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pull"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
pulltorefresh在写布局的时候代码是没有办法提醒的,所有必须的手敲
主类:
package com.example.happy;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.squareup.picasso.Picasso;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private String u = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=";
private int n = 1;
private PullToRefreshListView pull;//****
private List<item.DataBean> list = new ArrayList();
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pull = findViewById(R.id.pull);
pull.setMode(PullToRefreshBase.Mode.BOTH);//*****设置模式为上拉下滑都可用
new MyTask().execute();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
myAdapter = new MyAdapter(list, this);
pull.setAdapter(myAdapter);//****差不多就是listview的用法
ILoadingLayout startLables = pull.getLoadingLayoutProxy(true, false);
startLables.setPullLabel("下拉,下拉,下拉");//刚下拉时,显示的提示
startLables.setRefreshingLabel("正在更新..");//刷新时
startLables.setReleaseLabel("放开那个女孩,让我来");//下拉达到 一定的距离时,显示的文字
startLables.setLoadingDrawable(getResources().getDrawable(R.mipmap.ic_launcher));//设置下拉旋转的图标
ILoadingLayout endLables = pull.getLoadingLayoutProxy(false, true);
endLables.setPullLabel("上拉上拉上拉啊~");
endLables.setRefreshingLabel("正在更新>>");
endLables.setReleaseLabel("放手也是一种爱.");
endLables.setLoadingDrawable(getResources().getDrawable(R.mipmap.ic_launcher));//设置上拉旋转的图标
pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
//下拉刷新
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
n = 1;
list.clear();
new MyTask().execute();
}
//下拉加载
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
n++;
new MyTask().execute();
}
});
//进行吐司
pull.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, list.get(position - 1).getTitle(), Toast.LENGTH_SHORT).show();
}
});
}
class MyTask extends AsyncTask<String, Intent, String> {
//子线程,耗时操作
@Override
protected String doInBackground(String... strings) {
StringBuffer stringBuffer = new StringBuffer();
try {
URL url = new URL(u + n);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
byte[] bytes = new byte[1024];
int length = 0;
while ((length = inputStream.read(bytes)) != -1) {
stringBuffer.append(new String(bytes, 0, length));
}
} catch (Exception e) {
e.printStackTrace();
}
return stringBuffer.toString();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
pull.onRefreshComplete();
item item = gson.fromJson(s, item.class);
List<item.DataBean> data = item.getData();
list.addAll(data);
myAdapter.notifyDataSetChanged();
}
}
}
class MyAdapter extends BaseAdapter {
private List<item.DataBean> list;
private Context context;
public MyAdapter(List<item.DataBean> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
//布局的优化
convertView = LayoutInflater.from(context).inflate(R.layout.shipei, parent, false);
//
viewHolder.iv = convertView.findViewById(R.id.iv);
viewHolder.tv = convertView.findViewById(R.id.tv);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
Picasso.with(context).load(list.get(position).getPic()).into(viewHolder.iv);
viewHolder.tv.setText(list.get(position).getTitle());
return convertView;
}
static class ViewHolder {
ImageView iv;
TextView tv;
}
}
他跟listview的用法是一样的,主要的不同就在于: