Android ListView下拉刷新,androidlistview
投稿于 被查看 26448 次 评论:221
Android ListView下拉刷新,androidlistview
<无详细内容>1.[Java]代码
package com.stay.main; 002 003 import java.net.HttpURLConnection; 004 import java.util.ArrayList; 005 import java.util.HashMap; 006 007 import org.json.JSONObject; 008 009 import android.app.Activity; 010 import android.app.ProgressDialog; 011 import android.graphics.drawable.Drawable; 012 import android.os.Bundle; 013 import android.os.Handler; 014 import android.os.HandlerThread; 015 import android.os.Looper; 016 import android.os.Message; 017 import android.view.LayoutInflater; 018 import android.view.View; 019 import android.widget.AbsListView; 020 import android.widget.AbsListView.OnScrollListener; 021 import android.widget.Button; 022 import android.widget.LinearLayout; 023 import android.widget.ListView; 024 import android.widget.RelativeLayout; 025 import android.widget.TextView; 026 027 import com.stay.wifi.R; 028 029 /** 030 * @author Stay 031 * 动态加载listview数据,上拉 刷新,下拉 更多 032 */ 033 public class ListViewActivity extends Activity implements OnScrollListener { 034 private static final int LOAD = 0; 035 private static final int ERROR = 0; 036 private static final int MEMBER = 1; 037 private static final int LOADED = 2; 038 private static final int DIALOG = 3; 039 private static final int FULL = 4; 040 private NearbyAdapter adapter; 041 private ListView nearby_lv; 042 private RelativeLayout nearby_lv_header; 043 private Button list_bottom_btn; 044 private LinearLayout list_bottom_linear; 045 private TextView bottom_progress_text; 046 private RelativeLayout nearby_lv_footer; 047 private Button list_header_btn; 048 private LinearLayout list_header_linear; 049 private TextView heard_progress_text; 050 private ArrayList<JSONObject> nearby_data = new ArrayList<JSONObject>(); 051 private int lastItem; 052 private HashMap<String, Drawable> imageCache; 053 private com.stay.main.ListViewActivity.MyHandler myHandler; 054 private ProgressDialog dialog; 055 private int curPage = 1; 056 private boolean isMember = false; 057 private int firstItem; 058 public int count; 059 060 /** Called when the activity is first created. */ 061 @Override 062 public void onCreate(Bundle savedInstanceState) { 063 super.onCreate(savedInstanceState); 064 setContentView(R.layout.main); 065 initView(); 066 myHandler.sendEmptyMessage(LOAD); 067 } 068 069 @Override 070 public void onScrollStateChanged(AbsListView view, int scrollState) { 071 DebugUtil.debug("onScrollStateChanged"); 072 //当滚动停止且滚动的总数等于数据的总数,去加载 073 if (lastItem == count && scrollState == SCROLL_STATE_IDLE) { 074 DebugUtil.debug("onScrollStateChanged--------next"); 075 if (curPage == 4 && !isMember) { 076 DebugUtil.show(this, "您不是正式会员,请申请正式会员,"); 077 list_bottom_linear.setVisibility(View.GONE); 078 } else { 079 //加载数据 080 myHandler.sendEmptyMessage(LOAD); 081 } 082 return; 083 } 084 //当往上拉时更新数据,将data清空然后去重新加载 085 if (firstItem == 0 && scrollState == SCROLL_STATE_IDLE) { 086 DebugUtil.debug("onScrollStateChanged--------refresh"); 087 curPage = 0; 088 myHandler.sendEmptyMessage(LOAD); 089 } 090 } 091 092 @Override 093 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 094 DebugUtil.debug("firstVisibleItem=" + firstVisibleItem); 095 DebugUtil.debug("visibleItemCount=" + visibleItemCount); 096 DebugUtil.debug("totalItemCount=" + totalItemCount); 097 //这里要减二,因为我加了header footer 098 lastItem = firstVisibleItem + visibleItemCount - 2; 099 firstItem = firstVisibleItem; 100 } 101 102 public int getData() { 103 try { 104 HttpURLConnection conn = DownloadUtil.download("http://zdevl.mapi.jjdd.com/nearby/lbs?page=" + curPage); 105 ArrayList<JSONObject> temp = JSONUtil.streamToJsonList(conn.getInputStream()); 106 if (curPage == 0 && nearby_data.size() > 0) { 107 nearby_data.clear(); 108 count = 0; 109 } 110 if (temp != null && temp.size() > 0) { 111 count += temp.size(); 112 nearby_data.addAll(temp); 113 DebugUtil.debug("nearby_data.size()="+nearby_data.size()); 114 } else { 115 return FULL; 116 } 117 return LOADED; 118 } catch (Exception e) { 119 return ERROR; 120 } 121 } 122 123 private Handler handler = new Handler() { 124 @Override 125 public void handleMessage(Message msg) { 126 super.handleMessage(msg); 127 switch (msg.what) { 128 case DIALOG: 129 list_bottom_linear.setVisibility(View.VISIBLE); 130 list_header_linear.setVisibility(View.VISIBLE); 131 break; 132 case LOADED: 133 list_bottom_linear.setVisibility(View.GONE); 134 list_header_linear.setVisibility(View.GONE); 135 curPage++; 136 adapter.notifyDataSetChanged(); 137 break; 138 case ERROR: 139 DebugUtil.debug("error,missing data"); 140 break; 141 case MEMBER: 142 DebugUtil.debug("you must regist formal member"); 143 break; 144 default: 145 break; 146 } 147 } 148 }; 149 //创建子线程加载数据,然后更新 150 private class MyHandler extends Handler { 151 private int status; 152 153 public MyHandler(Looper looper) { 154 super(looper); 155 } 156 157 @Override 158 public void handleMessage(Message msg) { 159 synchronized (this) { 160 switch (msg.what) { 161 case LOAD:// get data from server 162 handler.sendEmptyMessage(DIALOG);//显示等待框 163 status = getData(); 164 handler.sendEmptyMessageDelayed(status, 1000); 165 break; 166 default: 167 break; 168 } 169 } 170 } 171 } 172 173 public void initView() { 174 imageCache = new HashMap<String, Drawable>(); 175 HandlerThread handlerThread = new HandlerThread("nearby"); 176 // 在使用HandlerThread的getLooper()方法之前,必须先调用该类的start(); 177 handlerThread.start(); 178 myHandler = new MyHandler(handlerThread.getLooper()); 179 nearby_lv = (ListView) findViewById(R.id.nearby_lv); 180 nearby_lv_footer = (RelativeLayout) LayoutInflater.from(ListViewActivity.this).inflate(R.layout.nearby_lv_header, null); 181 list_bottom_btn = (Button) nearby_lv_footer.findViewById(R.id.list_bottom_btn); 182 list_bottom_linear = (LinearLayout) nearby_lv_footer.findViewById(R.id.list_bottom_linear); 183 bottom_progress_text = (TextView) nearby_lv_footer.findViewById(R.id.progress_text); 184 nearby_lv_header = (RelativeLayout) LayoutInflater.from(ListViewActivity.this).inflate(R.layout.nearby_lv_header, null); 185 list_header_btn = (Button) nearby_lv_header.findViewById(R.id.list_bottom_btn); 186 list_header_linear = (LinearLayout) nearby_lv_header.findViewById(R.id.list_bottom_linear); 187 heard_progress_text = (TextView) nearby_lv_header.findViewById(R.id.progress_text); 188 list_header_btn.setText("刷新"); 189 list_bottom_btn.setText("更多"); 190 list_header_linear.setVisibility(View.GONE); 191 nearby_lv.addHeaderView(nearby_lv_header); 192 nearby_lv.addFooterView(nearby_lv_footer); 193 // list_header_btn.setOnClickListener(header_click); 194 adapter = new NearbyAdapter(ListViewActivity.this, nearby_data); 195 nearby_lv.setAdapter(adapter); 196 nearby_lv.setOnScrollListener(ListViewActivity.this); 197 } 198 }
2.[Java]代码
package com.stay.main; 002 003 import java.net.HttpURLConnection; 004 import java.util.ArrayList; 005 import java.util.HashMap; 006 007 import org.json.JSONObject; 008 009 import android.app.Activity; 010 import android.app.ProgressDialog; 011 import android.graphics.drawable.Drawable; 012 import android.os.Bundle; 013 import android.os.Handler; 014 import android.os.HandlerThread; 015 import android.os.Looper; 016 import android.os.Message; 017 import android.view.LayoutInflater; 018 import android.view.View; 019 import android.widget.AbsListView; 020 import android.widget.AbsListView.OnScrollListener; 021 import android.widget.Button; 022 import android.widget.LinearLayout; 023 import android.widget.ListView; 024 import android.widget.RelativeLayout; 025 import android.widget.TextView; 026 027 import com.stay.wifi.R; 028 029 /** 030 * @author Stay 031 * 动态加载listview数据,上拉 刷新,下拉 更多 032 */ 033 public class ListViewActivity extends Activity implements OnScrollListener { 034 private static final int LOAD = 0; 035 private static final int ERROR = 0; 036 private static final int MEMBER = 1; 037 private static final int LOADED = 2; 038 private static final int DIALOG = 3; 039 private static final int FULL = 4; 040 private NearbyAdapter adapter; 041 private ListView nearby_lv; 042 private RelativeLayout nearby_lv_header; 043 private Button list_bottom_btn; 044 private LinearLayout list_bottom_linear; 045 private TextView bottom_progress_text; 046 private RelativeLayout nearby_lv_footer; 047 private Button list_header_btn; 048 private LinearLayout list_header_linear; 049 private TextView heard_progress_text; 050 private ArrayList<JSONObject> nearby_data = new ArrayList<JSONObject>(); 051 private int lastItem; 052 private HashMap<String, Drawable> imageCache; 053 private com.stay.main.ListViewActivity.MyHandler myHandler; 054 private ProgressDialog dialog; 055 private int curPage = 1; 056 private boolean isMember = false; 057 private int firstItem; 058 public int count; 059 060 /** Called when the activity is first created. */ 061 @Override 062 public void onCreate(Bundle savedInstanceState) { 063 super.onCreate(savedInstanceState); 064 setContentView(R.layout.main); 065 initView(); 066 myHandler.sendEmptyMessage(LOAD); 067 } 068 069 @Override 070 public void onScrollStateChanged(AbsListView view, int scrollState) { 071 DebugUtil.debug("onScrollStateChanged"); 072 //当滚动停止且滚动的总数等于数据的总数,去加载 073 if (lastItem == count && scrollState == SCROLL_STATE_IDLE) { 074 DebugUtil.debug("onScrollStateChanged--------next"); 075 if (curPage == 4 && !isMember) { 076 DebugUtil.show(this, "您不是正式会员,请申请正式会员,"); 077 list_bottom_linear.setVisibility(View.GONE); 078 } else { 079 //加载数据 080 myHandler.sendEmptyMessage(LOAD); 081 } 082 return; 083 } 084 //当往上拉时更新数据,将data清空然后去重新加载 085 if (firstItem == 0 && scrollState == SCROLL_STATE_IDLE) { 086 DebugUtil.debug("onScrollStateChanged--------refresh"); 087 curPage = 0; 088 myHandler.sendEmptyMessage(LOAD); 089 } 090 } 091 092 @Override 093 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 094 DebugUtil.debug("firstVisibleItem=" + firstVisibleItem); 095 DebugUtil.debug("visibleItemCount=" + visibleItemCount); 096 DebugUtil.debug("totalItemCount=" + totalItemCount); 097 //这里要减二,因为我加了header footer 098 lastItem = firstVisibleItem + visibleItemCount - 2; 099 firstItem = firstVisibleItem; 100 } 101 102 public int getData() { 103 try { 104 HttpURLConnection conn = DownloadUtil.download("http://zdevl.mapi.jjdd.com/nearby/lbs?page=" + curPage); 105 ArrayList<JSONObject> temp = JSONUtil.streamToJsonList(conn.getInputStream()); 106 if (curPage == 0 && nearby_data.size() > 0) { 107 nearby_data.clear(); 108 count = 0; 109 } 110 if (temp != null && temp.size() > 0) { 111 count += temp.size(); 112 nearby_data.addAll(temp); 113 DebugUtil.debug("nearby_data.size()="+nearby_data.size()); 114 } else { 115 return FULL; 116 } 117 return LOADED; 118 } catch (Exception e) { 119 return ERROR; 120 } 121 } 122 123 private Handler handler = new Handler() { 124 @Override 125 public void handleMessage(Message msg) { 126 super.handleMessage(msg); 127 switch (msg.what) { 128 case DIALOG: 129 list_bottom_linear.setVisibility(View.VISIBLE); 130 list_header_linear.setVisibility(View.VISIBLE); 131 break; 132 case LOADED: 133 list_bottom_linear.setVisibility(View.GONE); 134 list_header_linear.setVisibility(View.GONE); 135 curPage++; 136 adapter.notifyDataSetChanged(); 137 break; 138 case ERROR: 139 DebugUtil.debug("error,missing data"); 140 break; 141 case MEMBER: 142 DebugUtil.debug("you must regist formal member"); 143 break; 144 default: 145 break; 146 } 147 } 148 }; 149 //创建子线程加载数据,然后更新 150 private class MyHandler extends Handler { 151 private int status; 152 153 public MyHandler(Looper looper) { 154 super(looper); 155 } 156 157 @Override 158 public void handleMessage(Message msg) { 159 synchronized (this) { 160 switch (msg.what) { 161 case LOAD:// get data from server 162 handler.sendEmptyMessage(DIALOG);//显示等待框 163 status = getData(); 164 handler.sendEmptyMessageDelayed(status, 1000); 165 break; 166 default: 167 break; 168 } 169 } 170 } 171 } 172 173 public void initView() { 174 imageCache = new HashMap<String, Drawable>(); 175 HandlerThread handlerThread = new HandlerThread("nearby"); 176 // 在使用HandlerThread的getLooper()方法之前,必须先调用该类的start(); 177 handlerThread.start(); 178 myHandler = new MyHandler(handlerThread.getLooper()); 179 nearby_lv = (ListView) findViewById(R.id.nearby_lv); 180 nearby_lv_footer = (RelativeLayout) LayoutInflater.from(ListViewActivity.this).inflate(R.layout.nearby_lv_header, null); 181 list_bottom_btn = (Button) nearby_lv_footer.findViewById(R.id.list_bottom_btn); 182 list_bottom_linear = (LinearLayout) nearby_lv_footer.findViewById(R.id.list_bottom_linear); 183 bottom_progress_text = (TextView) nearby_lv_footer.findViewById(R.id.progress_text); 184 nearby_lv_header = (RelativeLayout) LayoutInflater.from(ListViewActivity.this).inflate(R.layout.nearby_lv_header, null); 185 list_header_btn = (Button) nearby_lv_header.findViewById(R.id.list_bottom_btn); 186 list_header_linear = (LinearLayout) nearby_lv_header.findViewById(R.id.list_bottom_linear); 187 heard_progress_text = (TextView) nearby_lv_header.findViewById(R.id.progress_text); 188 list_header_btn.setText("刷新"); 189 list_bottom_btn.setText("更多"); 190 list_header_linear.setVisibility(View.GONE); 191 nearby_lv.addHeaderView(nearby_lv_header); 192 nearby_lv.addFooterView(nearby_lv_footer); 193 // list_header_btn.setOnClickListener(header_click); 194 adapter = new NearbyAdapter(ListViewActivity.this, nearby_data); 195 nearby_lv.setAdapter(adapter); 196 nearby_lv.setOnScrollListener(ListViewActivity.this); 197 } 198 }
用户评论