記一個 結合 listview asynctask json 網絡請求的 分頁操作

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;
	@Override
	public 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

	{

		@Override
		public void onScrollStateChanged(AbsListView view, int scrollState) {
			if(canLoad==true && OnScrollListener.SCROLL_STATE_IDLE==scrollState){
				//如果頁數大於總頁數,則返回
				if(++nowpage>4){
					return;
				}
				//否則繼續加載下一頁。這裏不是追加,是分頁
				new Task().execute(path+nowpage);
			}

		}

		@Override
		public 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;

		@Override
		protected 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;
		}

			//在執行完之後設置適配器
		@Override
		protected 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;

		}

		@Override
		public int getCount() {
 
			return list.size();
		}

		@Override
		public Object getItem(int position) {
 
			return list.get(position);
		}

		@Override
		public long getItemId(int position) {
 
			return position;
		}

		@Override
		public 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;

		}

	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章