Android ListView滚动提示

Android ListView滚动提示(一)

我们下面的代码主要讲的就是listview滚动的时候会出现一个提示,有了这个小的效果,我们可以再滚动的时候给用户带来不一样的感觉,如果要更好的效果,那就要看你怎么写代码了,下面的只是一个小的实例,那么我们还等什么呀,快来看代码吧:


java代码:
  1. package eoe.main;

  2. import java.net.HttpURLConnection;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;

  5. import org.json.JSONObject;
  6. import android.app.Activity;
  7. import android.app.ProgressDialog;
  8. import android.graphics.drawable.Drawable;
  9. import android.os.Bundle;
  10. import android.os.Handler;
  11. import android.os.HandlerThread;
  12. import android.os.Looper;
  13. import android.os.Message;
  14. import android.view.LayoutInflater;
  15. import android.view.View;
  16. import android.widget.AbsListView;
  17. import android.widget.AbsListView.OnScrollListener;
  18. import android.widget.Button;
  19. import android.widget.LinearLayout;
  20. import android.widget.ListView;
  21. import android.widget.RelativeLayout;
  22. import android.widget.TextView;

  23. import com.stay.wifi.R;

  24. /**
  25. * @author Stay 
  26. * 动态加载listview数据,上拉 刷新,下拉 更多
  27. */
  28. public class ListViewActivity extends Activity implements OnScrollListener {
  29. private static final int LOAD = 0;
  30. private static final int ERROR = 0;
  31. private static final int MEMBER = 1;
  32. private static final int LOADED = 2;
  33. private static final int DIALOG = 3;
  34. private static final int FULL = 4;
  35. private NearbyAdapter adapter;
  36. private ListView nearby_lv;
  37. private RelativeLayout nearby_lv_header;
  38. private Button list_bottom_btn;
  39. private LinearLayout list_bottom_linear;
  40. private TextView bottom_progress_text;
  41. private RelativeLayout nearby_lv_footer;
  42. private Button list_header_btn;
  43. private LinearLayout list_header_linear;
  44. private TextView heard_progress_text;
  45. private ArrayList<JSONObject> nearby_data = new ArrayList<JSONObject>();
  46. private int lastItem;
  47. private HashMap<String, Drawable> imageCache;
  48. private com.stay.main.ListViewActivity.MyHandler myHandler;
  49. private ProgressDialog dialog;
  50. private int curPage = 1;
  51. private boolean isMember = false;
  52. private int firstItem;
  53. public int count;

  54. /** Called when the activity is first created. */
  55. @Override
  56. public void onCreate(Bundle savedInstanceState) {
  57. super.onCreate(savedInstanceState);
  58. setContentView(R.layout.main);
  59. initView();
  60. myHandler.sendEmptyMessage(LOAD);
  61. }

  62. @Override
  63. public void onScrollStateChanged(AbsListView view, int scrollState) {
  64. DebugUtil.debug("onScrollStateChanged");
  65. //当滚动停止且滚动的总数等于数据的总数,去加载
  66. if (lastItem == count && scrollState == SCROLL_STATE_IDLE) {
  67. DebugUtil.debug("onScrollStateChanged--------next");
  68. if (curPage == 4 && !isMember) {
  69. DebugUtil.show(this, "您不是正式会员,请申请正式会员,");
  70. list_bottom_linear.setVisibility(View.GONE);
  71. } else {
  72. //加载数据
  73. myHandler.sendEmptyMessage(LOAD);
  74. }
  75. return;
  76. }
  77. //当往上拉时更新数据,将data清空然后去重新加载
  78. if (firstItem == 0 && scrollState == SCROLL_STATE_IDLE) {
  79. DebugUtil.debug("onScrollStateChanged--------refresh");
  80. curPage = 0;
  81. myHandler.sendEmptyMessage(LOAD);
  82. }
  83. }
复制代码




Android ListView滚动提示(二)



java代码:
  1. @Override
  2. public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {


  3. DebugUtil.debug("firstVisibleItem=" + firstVisibleItem);
  4. DebugUtil.debug("visibleItemCount=" + visibleItemCount);
  5. DebugUtil.debug("totalItemCount=" + totalItemCount);
  6.    
  7. //这里要减二,因为我加了header footer
  8. lastItem = firstVisibleItem + visibleItemCount - 2;
  9. firstItem = firstVisibleItem;
  10. }

  11. public int getData() {
  12. try {
  13. HttpURLConnection conn = DownloadUtil.download("http://zdevl.mapi.jjdd.com/nearby/lbs?page=" + curPage);
  14. ArrayList<JSONObject> temp = JSONUtil.streamToJsonList(conn.getInputStream());
  15. if (curPage == 0 && nearby_data.size() > 0) {
  16. nearby_data.clear();
  17. count = 0;
  18. }
  19.    
  20. if (temp != null && temp.size() > 0) {
  21. count += temp.size();
  22. nearby_data.addAll(temp);
  23. DebugUtil.debug("nearby_data.size()="+nearby_data.size());
  24. } else {
  25. return FULL;
  26. }
  27. return LOADED;
  28. } catch (Exception e) {
  29. return ERROR;
  30. }
  31. }

  32. private Handler handler = new Handler() {
  33. @Override
  34. public void handleMessage(Message msg) {
  35. super.handleMessage(msg);
  36. switch (msg.what) {
  37. case DIALOG:
  38. list_bottom_linear.setVisibility(View.VISIBLE);
  39. list_header_linear.setVisibility(View.VISIBLE);
  40. break;
  41. case LOADED:
  42. list_bottom_linear.setVisibility(View.GONE);
  43. list_header_linear.setVisibility(View.GONE);
  44. curPage++;
  45. adapter.notifyDataSetChanged();
  46. break;
  47. case ERROR:
  48. DebugUtil.debug("error,missing data");
  49. break;
  50. case MEMBER:
  51. DebugUtil.debug("you must regist formal member");
  52. break;
  53. default:
  54. break;
  55. }
  56. }
  57. };


  58. //创建子线程加载数据,然后更新
  59. private class MyHandler extends Handler {
  60. private int status;

  61. public MyHandler(Looper looper) {
  62. super(looper);
  63. }

  64. @Override
  65. public void handleMessage(Message msg) {
  66. synchronized (this) {
  67. switch (msg.what) {
  68. case LOAD:// get data from server
  69. handler.sendEmptyMessage(DIALOG);//显示等待框
  70. status = getData();
  71. handler.sendEmptyMessageDelayed(status, 1000);
  72. break;
  73. default:
  74. break;
  75. }
  76. }
  77. }
  78. }

  79. public void initView() {
  80. imageCache = new HashMap<String, Drawable>();
  81. HandlerThread handlerThread = new HandlerThread("nearby");
  82. // 在使用HandlerThread的getLooper()方法之前,必须先调用该类的start();
  83. handlerThread.start();
  84. myHandler = new MyHandler(handlerThread.getLooper());
  85. nearby_lv = (ListView) findViewById(R.id.nearby_lv);
  86. nearby_lv_footer = (RelativeLayout) LayoutInflater.from(ListViewActivity.this).inflate(R.layout.nearby_lv_header, null);
  87. list_bottom_btn = (Button) nearby_lv_footer.findViewById(R.id.list_bottom_btn);
  88. list_bottom_linear = (LinearLayout) nearby_lv_footer.findViewById(R.id.list_bottom_linear);
  89. bottom_progress_text = (TextView) nearby_lv_footer.findViewById(R.id.progress_text);
  90. nearby_lv_header = (RelativeLayout) LayoutInflater.from(ListViewActivity.this).inflate(R.layout.nearby_lv_header, null);
  91. list_header_btn = (Button) nearby_lv_header.findViewById(R.id.list_bottom_btn);
  92. list_header_linear = (LinearLayout) nearby_lv_header.findViewById(R.id.list_bottom_linear);
  93. heard_progress_text = (TextView) nearby_lv_header.findViewById(R.id.progress_text);
  94. list_header_btn.setText("刷新");
  95. list_bottom_btn.setText("更多");
  96. list_header_linear.setVisibility(View.GONE);
  97. nearby_lv.addHeaderView(nearby_lv_header);
  98. nearby_lv.addFooterView(nearby_lv_footer);
  99. // list_header_btn.setOnClickListener(header_click);
  100. adapter = new NearbyAdapter(ListViewActivity.this, nearby_data);
  101. nearby_lv.setAdapter(adapter);
  102. nearby_lv.setOnScrollListener(ListViewActivity.this);
  103. }
  104. }
复制代码


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值