安卓中PullToRefresh添加头布局的方法

PullToRefreshListView第三方的自定义listview用起来很方便,但是有时候我们需要为这个listview添加头,由于PullToRefreshListView没有.addHeaderView方法

这时候添加头,就有点犯难了。其实加头只需要一句简单的代码就行

 

我们为第三方的PullToRefresh添加头部的方法

由于PullToRefreshListView没有直接添加头布局的方法,所以我们需要用refreshListView.getRefreshableView()把refreshListView
转化成正常的listview,转化后的listview才可以添加头布局。

private PullToRefreshListView refreshListView;
private ListView listView;
listView = refreshListView.getRefreshableView();
 listView .addHeaderView(headerView);

下面两个例子分别为activity和fragment中的PullToRefresh添加头

一:在activity中为PullToRefresh添加头

  1. package com.huxiu.yd;  
  2. import android.os.Bundle;  
  3. import android.view.View;  
  4. import android.view.ViewGroup;  
  5. import android.widget.BaseAdapter;  
  6. import android.widget.FrameLayout;  
  7. import android.widget.ImageView;  
  8. import android.widget.LinearLayout;  
  9. import android.widget.ListView;  
  10. import android.widget.TextView;  
  11.   
  12.   
  13. import com.android.volley.Request;  
  14. import com.android.volley.Response;  
  15. import com.android.volley.VolleyError;  
  16. import com.handmark.pulltorefresh.library.PullToRefreshBase;  
  17. import com.handmark.pulltorefresh.library.PullToRefreshListView;  
  18. import com.huxiu.yd.net.GsonRequest;  
  19. import com.huxiu.yd.net.NetworkConstants;  
  20. import com.huxiu.yd.net.NetworkHelper;  
  21. import com.huxiu.yd.net.model.DiscoveryItem;  
  22. import com.huxiu.yd.net.responses.DiscoveryListResponse;  
  23. import com.huxiu.yd.utils.Utils;  
  24. import com.makeramen.roundedimageview.RoundedImageView;  
  25. import com.nostra13.universalimageloader.core.ImageLoader;  
  26. import com.nostra13.universalimageloader.core.listener.PauseOnScrollListener;  
  27.   
  28.   
  29. import java.util.ArrayList;  
  30. import java.util.Collections;  
  31. import java.util.LinkedHashMap;  
  32. import java.util.List;  
  33. import java.util.Map;  
  34.   
  35.   
  36. import butterknife.ButterKnife;  
  37. import butterknife.InjectView;  
  38.   
  39.   
  40. public class JiFenActivity2 extends BaseActivity  
  41.         implements PullToRefreshBase.OnRefreshListener2<ListView>, View.OnClickListener {  
  42.     @InjectView(R.id.back)  
  43.     ImageView back;  
  44.     @InjectView(R.id.title)  
  45.     TextView title;  
  46.     @InjectView(R.id.right_text)  
  47.     TextView rightText;  
  48.   
  49.   
  50.   
  51.   
  52.     FrameLayout qiandao_frame;  
  53.     RoundedImageView qiandao_bg;  
  54.     LinearLayout qiandao_ok;  
  55.     LinearLayout qiandao_no;  
  56.     TextView jifen_num;  
  57.     @InjectView(R.id.list_out)  
  58.     PullToRefreshListView list_out;  
  59.     ListView list;  
    1. @Override  
    2.     protected void onCreate(Bundle savedInstanceState) {  
    3.         super.onCreate(savedInstanceState);  
    4.         setContentView(R.layout.activity_ji_fen2);  
    5.         ButterKnife.inject(this);  
    6.         View headerView = View.inflate(getApplicationContext(), R.layout.list_mine_header,  
    7.                 null);  
    8.         qiandao_frame = (FrameLayout) headerView.findViewById(R.id.qiandao_frame);  
    9.         qiandao_bg = (RoundedImageView) headerView.findViewById(R.id.qiandao_bg);  
    10.         qiandao_ok = (LinearLayout) headerView.findViewById(R.id.qiandao_ok);  
    11.         qiandao_no = (LinearLayout) headerView.findViewById(R.id.qiandao_no);  
    12.   
    13.   
    14.         list = list_out.getRefreshableView();  
    15.         list.setDividerHeight(0);// 隐藏listview默认的divider  
    16.         list.setSelector(android.R.color.transparent);// 隐藏listview默认的selector  
    17.         rightText.setVisibility(View.VISIBLE);  
    18.         rightText.setText(R.string.shuoming);  
    19.         rightText.setTextColor(0xffffffff);  
    20.         back.setOnClickListener(this);  
    21.         rightText.setOnClickListener(this);  
    22.         qiandao_frame.setOnClickListener(this);  
    23.         title.setText(R.string.myjifen);  
    24.         list.addHeaderView(headerView);  
    25.         list_out.setOnRefreshListener(this);  
    26.         list_out.setState(PullToRefreshBase.State.INIT_REFRESHING, true);  
    27.         PauseOnScrollListener listener = new PauseOnScrollListener(ImageLoader.getInstance(), false,  
    28.                 true);  
    29.         list_out.setOnScrollListener(listener);  
    30.         adapter = new MyAdapter();  
    31.         list.setAdapter(adapter);  
    32.   
    33.   
    34.     }  
    35.   
    36.   
    37.     @Override  
    38.     public void onPullDownToRefresh(PullToRefreshBase refreshView) {  
    39.         getItems(1);  
    40.     }  
    41.   
    42.   
    43.     @Override  
    44.     public void onPullUpToRefresh(PullToRefreshBase refreshView) {  
    45.         getItems(currentPage + 1);  
    46.     }  
    47.   
    48.   
    49.     private void refreshComplete() {  
    50.         list_out.postDelayed(new Runnable() {  
    51.             @Override  
    52.             public void run() {  
    53.                 list_out.onRefreshComplete();  
    54.             }  
    55.         }, 100);  
    56.     }  
    57.   
    58.   
    59.     @Override  
    60.     protected void onDestroy() {  
    61.         super.onDestroy();  
    62.         ButterKnife.reset(this);  
    63.         NetworkHelper.getInstance().getRequestQueue().cancelAll(this);  
    64.   
    65.   
    66.     }  
    67.   
    68.   
    69.   
    70.   
    71.     @Override  
    72.     public void onClick(View v) {  
    73.         switch (v.getId()) {  
    74.             case R.id.qiandao_frame:  
    75.                 Utils.showToast("点击旋转动画");  
    76.                 break;  
    77.             case R.id.back:  
    78.                 finish();  
    79.                 break;  
    80.             case R.id.right_text:  
    81.                 Utils.showToast("跳到积分页面");  
    82.                 break;  
    83.         }  
    84.     }  
    85.   
    86.   
    87.   
    88.   
    89.     private int totalPages = 0;  
    90.     private int currentPage = 0;  
    91.     private List<DiscoveryItem> items = new ArrayList<>();  
    92.   
    93.   
    94.     private void getItems(final int page) {  
    95.         String url = NetworkConstants.ACTION_URL;  
    96.         Map<String, String> params = new LinkedHashMap<>();  
    97.         params.put("act", "credits_log");  
    98.         params.put("page", Integer.toString(page));  
    99.         GsonRequest<DiscoveryListResponse> request = new GsonRequest<>(url, Request.Method.POST,  
    100.                 DiscoveryListResponse.class, true, params, new Response.Listener<DiscoveryListResponse>() {  
    101.             @Override  
    102.             public void onResponse(DiscoveryListResponse response) {  
    103.                 if (response.isSuccess()) {  
    104.                     if (page == 1 || page == 0) {  
    105.                         items.clear();  
    106.                     }  
    107.                     if (list_out != null) {  
    108.                         if (response.page == response.max_page) {  
    109.                             list_out.setMode(PullToRefreshBase.Mode.PULL_FROM_START);  
    110.                         } else {  
    111.                             list_out.setMode(PullToRefreshBase.Mode.BOTH);  
    112.                         }  
    113.                     }  
    114.                     Collections.addAll(items, response.data);  
    115.                     adapter.notifyDataSetChanged();  
    116.                     currentPage = response.page;  
    117.                 } else {  
    118.                     Utils.showToast(response.msg);  
    119.                 }  
    120.                 refreshComplete();  
    121.             }  
    122.         }, new Response.ErrorListener() {  
    123.             @Override  
    124.             public void onErrorResponse(VolleyError volleyError) {  
    125.                 Utils.showToast(R.string.generic_failure);  
    126.                 refreshComplete();  
    127.             }  
    128.         });  
    129.         NetworkHelper.getInstance().addToRequestQueue(request);  
    130.     }  
    131.   
    132.   
    133.   
    134.   
    135.     private MyAdapter adapter;  
    136.   
    137.   
    138.     class MyAdapter extends BaseAdapter {  
    139.   
    140.   
    141.         @Override  
    142.         public int getCount() {  
    143.             return items.size();  
    144.         }  
    145.   
    146.   
    147.         @Override  
    148.         public Object getItem(int position) {  
    149.             return items.get(position);  
    150.         }  
    151.   
    152.   
    153.         @Override  
    154.         public long getItemId(int position) {  
    155.             return 0;  
    156.         }  
    157.   
    158.   
    159.   
    160.   
    161.         @Override  
    162.         public View getView(int position, View convertView, ViewGroup parent) {  
    163.             ViewHolder vh;  
    164.             View v = convertView;  
    165.             if (v == null) {  
    166.                 v = getLayoutInflater().inflate(R.layout.item_jifen_list, parent, false);  
    167.                 vh = new ViewHolder(v);  
    168.                 v.setTag(vh);  
    169.             }  
    170.             final DiscoveryItem item = items.get(position);  
    171.             vh = (ViewHolder) v.getTag();  
    172.             vh.jifen_type.setText(item.message);  
    173.             vh.jifen_time.setText(Utils.getDateString(item.create_time));  
    174.             vh.jifen_num.setText("+" + item.value);  
    175.             return v;  
    176.         }  
    177.     }  
    178.   
    179.   
    180.     class ViewHolder {  
    181.         @InjectView(R.id.jifen_type)  
    182.         TextView jifen_type;  
    183.   
    184.   
    185.         @InjectView(R.id.jifen_time)  
    186.         TextView jifen_time;  
    187.   
    188.   
    189.         @InjectView(R.id.jifen_num)  
    190.         TextView jifen_num;  
    191.   
    192.   
    193.         ViewHolder(View view) {  
    194.             ButterKnife.inject(this, view);  
    195.         }  
    196.     }  
    197. }
    198.  
    199. 上面activity的布局文件
      1. <?xml version="1.0" encoding="utf-8"?>  
      2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
      3.               xmlns:tools="http://schemas.android.com/tools"  
      4.               android:layout_width="match_parent"  
      5.               android:layout_height="match_parent"  
      6.               android:background="@color/white"  
      7.               android:orientation="vertical">  
      8.   
      9.     <include  
      10.         android:id="@+id/header"  
      11.         layout="@layout/header"/>  
      12.   
      13.     <com.handmark.pulltorefresh.library.PullToRefreshListView  
      14.         android:id="@+id/list_out"  
      15.         xmlns:ptr="http://schemas.android.com/apk/res-auto"  
      16.         android:layout_width="match_parent"  
      17.         android:layout_height="match_parent"  
      18.         android:divider="@null"  
      19.         android:footerDividersEnabled="false"  
      20.         android:listSelector="@android:color/transparent"  
      21.         ptr:ptrHeaderTextColor="@color/gray4"  
      22.         ptr:ptrMode="both"  
      23.         tools:listitem="@layout/discovery_list_item"/>  
      24. </LinearLayout>
      25.  二,在fragment中为PullToRefresh添加头     
        1. package com.shitou.googleplay.ui.fragment;  
        2.   
        3.   
        4. import java.util.ArrayList;  
        5.   
        6.   
        7. import org.json.JSONArray;  
        8. import org.json.JSONException;  
        9. import org.json.JSONObject;  
        10.   
        11.   
        12. import android.content.Intent;  
        13. import android.os.Handler;  
        14. import android.support.v4.view.ViewPager;  
        15. import android.text.TextUtils;  
        16. import android.view.View;  
        17. import android.widget.AdapterView;  
        18. import android.widget.AdapterView.OnItemClickListener;  
        19. import android.widget.LinearLayout.LayoutParams;  
        20. import android.widget.ListView;  
        21. import com.handmark.pulltorefresh.library.PullToRefreshBase;  
        22. import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;  
        23. import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;  
        24. import com.handmark.pulltorefresh.library.PullToRefreshListView;  
        25. import com.googleplay.R;  
        26. import com.shitou.googleplay.bean.AppInfo;  
        27. import com.shitou.googleplay.bean.Home;  
        28. import com.shitou.googleplay.http.HttpHelper;  
        29. import com.shitou.googleplay.http.Url;  
        30. import com.shitou.googleplay.ui.activity.AppDetailActivity;  
        31. import com.shitou.googleplay.ui.adapter.HomeAdapter;  
        32. import com.shitou.googleplay.ui.adapter.HomePagerAdapter;  
        33. import com.shitou.googleplay.util.CommonUtil;  
        34. import com.shitou.googleplay.util.JsonUtil;  
        35. import com.shitou.googleplay.util.LogUtil;  
        36.   
        37.   
        38. public class HomeFragment extends BaseFragment {  
        39.   
        40.   
        41. private PullToRefreshListView refreshListView;  
        42. private ViewPager homePager;  
        43. private HomeAdapter homeAdapter;  
        44. private ArrayList<AppInfo> list = new ArrayList<AppInfo>();  
        45. private ListView listView;  
        46. private HomePagerAdapter homePagerAdapter;  
        47.   
        48. private Handler handler = new Handler(){  
        49. public void handleMessage(android.os.Message msg) {  
        50. homePager.setCurrentItem(homePager.getCurrentItem()+1);  
        51.   
        52. handler.sendEmptyMessageDelayed(0, 3000);  
        53. };  
        54. };  
        55.   
        56.   
        57. @Override  
        58. protected View getSuccessView() {  
        59. initRefreshListView();//初始化PullToRefreshListView  
        60.   
        61. initHeaderView();//添加头部的ViewPager  
        62.   
        63. //设置Adapter  
        64. homeAdapter = new HomeAdapter(list);  
        65. listView.setAdapter(homeAdapter);  
        66.   
        67.   
        68.   
        69. return refreshListView;  
        70. }  
        71.   
        72.   
        73. /** 
        74. * 初始化PullToRefreshListView 
        75. */  
        76. private void initRefreshListView() {  
        77. // 1.初始化refreshListView,并且给它设置刷新监听  
        78. refreshListView = (PullToRefreshListView) View.inflate(getActivity(),  
        79. R.layout.ptr_listview, null);  
        80. refreshListView.setMode(Mode.BOTH);// 设置两边都可以啦  
        81. refreshListView.setOnRefreshListener(new OnRefreshListener<ListView>() {  
        82. /** 
        83. * 上拉刷新和下拉加载更多都会执行该方法 
        84. *  
        85. * @param refreshView 
        86. */  
        87. @Override  
        88. public void onRefresh(PullToRefreshBase<ListView> refreshView) {  
        89. if (refreshListView.getCurrentMode() == Mode.PULL_FROM_START) {  
        90. // 下拉刷新  
        91. CommonUtil.runOnUIThread(new Runnable() {  
        92. @Override  
        93. public void run() {  
        94. refreshListView.onRefreshComplete();// 完成刷新的方法  
        95. }  
        96. });  
        97. else {  
        98. // 上拉加载更多,应该加载下一页的数据  
        99. contentPage.loadDataAndRefreshPage();  
        100. }  
        101. }  
        102. });  
        103. listView = refreshListView.getRefreshableView();  
        104. listView.setDividerHeight(0);// 隐藏listview默认的divider  
        105. listView.setSelector(android.R.color.transparent);// 隐藏listview默认的selector  
        106.   
        107. //给listView增加item点击事件  
        108. listView.setOnItemClickListener(new OnItemClickListener() {  
        109. @Override  
        110. public void onItemClick(AdapterView<?> parent, View view,  
        111. int position, long id) {  
        112. // LogUtil.e(this, "position:"+position);  
        113. Intent intent = new Intent(getActivity(),AppDetailActivity.class);  
        114. intent.putExtra("packageName",list.get(position-2).getPackageName());  
        115. startActivity(intent);  
        116. }  
        117. });  
        118. }  
        119. /** 
        120. * 初始化headerView 
        121. */  
        122. private void initHeaderView(){  
        123. View headerView = View.inflate(getActivity(), R.layout.layout_home_pager, null);  
        124. homePager = (ViewPager) headerView.findViewById(R.id.homePager);  
        125. //1.计算出ViewPager的宽度  
        126. float width = getActivity().getWindowManager().getDefaultDisplay().getWidth();  
        127. //2.根据图片的宽高比,计算出对应的高度,宽高比是2.65  
        128. float height = width/2.65f;  
        129. //3.将计算出来的高度重新赋值给VIewPager的高度  
        130. LayoutParams layoutParams = (LayoutParams) homePager.getLayoutParams();  
        131. layoutParams.height = (int) height;//重新给布局参数设置  
        132. homePager.setLayoutParams(layoutParams);  
        133. // homePager.requestLayout();//也可以这样写  
        134.   
        135. listView.addHeaderView(headerView);  
        136. }  
        137.   
        138.   
        139. @Override  
        140. protected Object requestData() {  
        141. String result = HttpHelper.get(Url.Home + list.size());  
        142.   
        143.   
        144. final Home home = JsonUtil.parseJsonToBean(result, Home.class);  
        145. if (home != null) {  
        146. // 更新数据  
        147. list.addAll(home.getList());  
        148. CommonUtil.runOnUIThread(new Runnable() {  
        149. @Override  
        150. public void run() {  
        151. //由于轮播图的url数据,只有在加载第一页的时候才有,  
        152. if(home.getPicture()!=null && home.getPicture().size()>0){  
        153. //表明是第一页加载数据,此时是有轮播图url的数据  
        154. homePagerAdapter = new HomePagerAdapter(home.getPicture());  
        155. homePager.setAdapter(homePagerAdapter);  
        156. //一开始设置选中的是中间的item  
        157. homePager.setCurrentItem(home.getPicture().size()*10000);  
        158. }  
        159.   
        160. // 更新adapter  
        161. homeAdapter.notifyDataSetChanged();  
        162.   
        163.   
        164. // 完成刷新  
        165. refreshListView.onRefreshComplete();// 完成刷新的方法  
        166. }  
        167. });  
        168. }  
        169.   
        170.   
        171. return home;  
        172. }  
        173.   
        174. @Override  
        175. public void onStart() {  
        176. super.onStart();  
        177. //发送延时消息  
        178. handler.sendEmptyMessageDelayed(0, 3000);  
        179. }  
        180.   
        181. @Override  
        182. public void onStop() {  
        183. super.onStop();  
        184. //移除消息  
        185. handler.removeCallbacksAndMessages(null);  
        186. }  
        187.   
        188.   
        189.   
        190. /** 
        191. * 使用JSONObject解析json 
        192. *  
        193. * @param json 
        194. * @return 
        195. */  
        196. private Home parseJson(String json) {  
        197. if (TextUtils.isEmpty(json))  
        198. return null;  
        199.   
        200.   
        201. Home home = new Home();  
        202. try {  
        203. JSONObject jsonObject = new JSONObject(json);  
        204. // 1.解析picture字段  
        205. ArrayList<String> picture = new ArrayList<String>();  
        206. JSONArray pictureArray = jsonObject.getJSONArray("picture");  
        207. for (int i = 0; i < pictureArray.length(); i++) {  
        208. String string = pictureArray.getString(i);  
        209. picture.add(string);  
        210. }  
        211. home.setPicture(picture);  
        212.   
        213.   
        214. // 2.解析list字段  
        215. ArrayList<AppInfo> list = new ArrayList<AppInfo>();  
        216. JSONArray listArray = jsonObject.getJSONArray("list");  
        217. for (int i = 0; i < listArray.length(); i++) {  
        218. JSONObject object = listArray.getJSONObject(i);  
        219. AppInfo appInfo = new AppInfo();  
        220. appInfo.setDes(object.getString("des"));  
        221. appInfo.setDownloadUrl(object.getString("downloadUrl"));  
        222. appInfo.setIconUrl(object.getString("iconUrl"));  
        223. appInfo.setId(object.getInt("id"));  
        224. appInfo.setName(object.getString("name"));  
        225. appInfo.setPackageName(object.getString("packageName"));  
        226. appInfo.setSize(object.getLong("size"));  
        227. appInfo.setStars((float) object.getDouble("stars"));  
        228.   
        229.   
        230. list.add(appInfo);  
        231. }  
        232. home.setList(list);  
        233. catch (JSONException e) {  
        234. e.printStackTrace();  
        235. }  
        236.   
        237.   
        238. return home;  
        239. }  
        240. }  

转载于:https://www.cnblogs.com/Dionexin/p/5821323.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值