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;
}
}
}
記一個 結合 listview asynctask json 網絡請求的 分頁操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.