记一个 结合 listview asynctask json 网络请求的 分页操作

来源:互联网 发布:开淘宝店 编辑:程序博客网 时间:2024/06/07 18:40
public class Fragment1 extends Fragment {private ListView listview;private MyListSdapt adapt;private String path ="http://192.168.11.57/108Project/mypage?page=";private int nowpage=1;private boolean canLoad =false;@Overridepublic View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_layout, null);listview = (ListView) view.findViewById(R.id.listview);//自定义一个listview的适配器adapt = new MyListSdapt();//为listview设置监听,用来操作分页listview.setOnScrollListener(new Mylisterner());//开启一个新异步任务。从网络获取数据new Task().execute(path+nowpage);return view;}//用力设置listview滑动监听class Mylisterner implements OnScrollListener{@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {if(canLoad==true && OnScrollListener.SCROLL_STATE_IDLE==scrollState){//如果页数大于总页数,则返回if(++nowpage>4){return;}//否则继续加载下一页。这里不是追加,是分页new Task().execute(path+nowpage);}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {if(firstVisibleItem+visibleItemCount==totalItemCount){canLoad=true;}else{canLoad=false;}}}//异步操作,从网络获取数据class Task extends AsyncTask<String, Void, List<String>> {List<String> list = null;@Overrideprotected List<String> doInBackground(String... params) {try {HttpClient client = new DefaultHttpClient();HttpGet request = new HttpGet(params[0]);HttpResponse resp = client.execute(request);if (resp.getStatusLine().getStatusCode() == 200) {String jsonObj = EntityUtils.toString(resp.getEntity());//{data,[{key,value},{},{},{}]}JSONArray ja = new JSONObject(jsonObj).getJSONArray("data");list = new ArrayList<String>();for (int i = 0; i < ja.length(); i++) {list.add(ja.getJSONObject(i).getString("city"));System.out.println(ja.getJSONObject(i).getString("city"));}}} catch (ClientProtocolException e) { e.printStackTrace();} catch (IOException e) { e.printStackTrace();} catch (JSONException e) { e.printStackTrace();}return list;}//在执行完之后设置适配器@Overrideprotected void onPostExecute(List<String> result) {//初始化适配器,将结果传过去adapt.bindData(result);listview.setAdapter(adapt);}}class MyListSdapt extends BaseAdapter {private List<String> list;public void bindData(List<String> list) {this.list = list;}@Overridepublic int getCount() { return list.size();}@Overridepublic Object getItem(int position) { return list.get(position);}@Overridepublic long getItemId(int position) { return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Handle handle = null;if (convertView == null) {convertView = LayoutInflater.from(getActivity()).inflate(R.layout.listview_layout, null);handle = new Handle();convertView.setTag(handle);} else {handle = (Handle) convertView.getTag();}handle.info = (TextView) convertView.findViewById(R.id.info);handle.info.setText(list.get(position));return convertView;}class Handle {TextView info;}}}

0 0