package com.edu.jereh.myapplicationzzzz; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.ListView; import com.edu.jereh.myapplicationzzzz.entity.MyListAdapter; import com.edu.jereh.myapplicationzzzz.entity.News; import com.handmark.pulltorefresh.library.ILoadingLayout; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; import java.util.ArrayList; public class PullToRefreshActivity extends AppCompatActivity { private PullToRefreshListView pv; private ArrayList<News> list; private MyListAdapter ma; private int PageCount=1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pull_to_refresh); pv = (PullToRefreshListView) findViewById(R.id.pv); list = new ArrayList<>(); for (int j = 0; j <= 20; j++) { list.add(new News("新闻" + j, "未来网", "今天", R.mipmap.ic_launcher, "评论")); } ma = new MyListAdapter(this, list); pv.setAdapter(ma); pv.setMode(PullToRefreshBase.Mode.BOTH);//设置上下拉动都能刷新 ILoadingLayout upstarLoading = pv.getLoadingLayoutProxy(true, false); upstarLoading.setPullLabel("下拉————刷新"); upstarLoading.setRefreshingLabel("刷新中"); upstarLoading.setReleaseLabel("下拉刷新完成"); ILoadingLayout downstartLoading = pv.getLoadingLayoutProxy(false,true); downstartLoading.setPullLabel("上啦————刷新"); downstartLoading.setRefreshingLabel("——上啦刷新中——"); downstartLoading.setReleaseLabel("上拉刷新完成"); View v = getLayoutInflater().inflate(R.layout.pv_header_layout,null); pv.getRefreshableView().addHeaderView(v);//加载头布局 pv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {//上啦下拉监听要设置2这个接口 @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { PageCount = 1; list.clear(); new MyRefresh().execute(); }//下拉 @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { new MyRefresh().execute(); }//上啦 }); } public void loadData() { for (int j = PageCount; j < (20 + PageCount); j++) { list.add(new News("新闻增加" + j, "未来网", "今天", R.mipmap.ic_launcher, "评论")); } PageCount += 20; ma.notifyDataSetChanged(); } public class MyRefresh extends AsyncTask<Void,Void,Void>{ @Override protected Void doInBackground(Void... params) { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); loadData(); pv.onRefreshComplete(); } } }
设置上下都能刷新,上拉刷新listview数量增加20,下拉清空,还设计了头布局。由于未连接网络在下面方法中抛出一个异常手动设置刷新的时间为3秒
Listview适配器代码:
package com.edu.jereh.myapplicationzzzz.entity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.edu.jereh.myapplicationzzzz.R; import java.util.List; /** * Created by sa on 2016/8/5. */ public class MyListAdapter extends BaseAdapter { private List<News> myData; private Context context; public MyListAdapter(Context context,List<News> myData){ this.context = context; this.myData = myData; } @Override public int getCount() { return myData.size(); } @Override public Object getItem(int position) { return myData.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView( int position, View convertView, ViewGroup parent) { // View view = LayoutInflater.from(context).inflate(R.layout.list_layout_base,null); // TextView title = (TextView)view.findViewById(R.id.title); // TextView pubData = (TextView)view.findViewById(R.id.pubData); // TextView from = (TextView) view.findViewById(R.id.from); // ImageView img = (ImageView) view.findViewById(R.id.img); // News news = myData.get(position); // title.setText(news.getTitle()); // pubData.setText(news.getPubData()); // from.setText(news.getFrom()); // img.setImageResource(news.getImg()); ViewHolder vh;//viewholder为的是listview滚动时候快速设置,不必每次创建新对象,从而节省性能 if(convertView==null){ vh = new ViewHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.list_layout_base,null); vh.title = (TextView) convertView.findViewById(R.id.title); vh.pubData = (TextView) convertView.findViewById(R.id.pubData); vh.title = (TextView) convertView.findViewById(R.id.title); vh.img = (ImageView) convertView.findViewById(R.id.img); vh.from = (TextView) convertView.findViewById(R.id.from); convertView.setTag(vh); }else { vh = (ViewHolder) convertView.getTag(); } vh.img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Toast.makeText(context, "点击了图片" + position, Toast.LENGTH_SHORT).show(); } }); News ns = myData.get(position); vh.title.setText(ns.getTitle()); vh.pubData.setText(ns.getPubData()); vh.img.setImageResource(ns.getImg()); vh.from.setText(ns.getFrom()); return convertView; } private class ViewHolder{ TextView title; TextView pubData; TextView from; ImageView img; } } Listview单布局文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="150dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是标题" android:gravity="center" android:id="@+id/title" android:layout_marginTop="27dp" android:layout_alignParentTop="true" android:layout_toEndOf="@+id/pubData" android:layout_marginStart="97dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="未来网" android:gravity="center" android:id="@+id/pubData" android:layout_alignBaseline="@+id/from" android:layout_alignBottom="@+id/from" android:layout_alignParentStart="true" /> <ImageView android:layout_width="60dp" android:layout_height="60dp" android:src="@mipmap/mm1" android:id="@+id/img" android:scaleType="centerCrop" android:layout_alignTop="@+id/title" android:layout_alignParentEnd="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="评论" android:gravity="center" android:id="@+id/from" android:layout_below="@+id/img" android:layout_alignParentEnd="true" android:layout_marginTop="36dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="今天" android:layout_marginTop="10dp" android:layout_marginLeft="15dp"/> </RelativeLayout>
效果展示:未刷新前
上拉刷新后下方增加20条,再上拉再加20条:
下啦刷新后清除上拉增加的20条,只显示最新的20条: