展会信息港展会大全

Android ListView下拉刷新
来源:互联网   发布日期:2015-11-25 22:45:42   浏览:2211次  

导读:Android ListView下拉刷新[代码] [Java]代码package com.stay.main; 002 003 import java.net.HttpURLConnection; 004 import java.util.ArrayList; 005 import java.util.HashMap; 006 007 imp......

Android ListView下拉刷新

[代码] [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 }

[代码] [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 }

赞助本站

人工智能实验室

相关热词: 下拉 刷新 ListView

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港