package com.jaf.biubiu; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.baidu.location.BDLocation; import com.jaf.bean.BeanNearbyItem; import com.jaf.bean.ResponseNearby; import com.jaf.jcore.AbsWorker; import com.jaf.jcore.Application; import com.jaf.jcore.BindView; import com.jaf.jcore.BindableFragment; import com.jaf.jcore.Http; import com.jaf.jcore.HttpCallBack; import com.jaf.jcore.JacksonWrapper; import com.jaf.jcore.NetworkListView; import org.json.JSONObject; import java.util.ArrayList; /** * Created by jarrah on 2015/4/14. */ public class FragmentNearby extends BindableFragment implements Constant { private static final String TAG = "FragmentNearby"; public FragmentNearby() { } private ArrayList<BeanNearbyItem> mDataSource; @BindView(id = R.id.networkListView) private NetworkListView<ViewNearbyItem, BeanNearbyItem> mNetworkListView; private com.jaf.jcore.AbsWorker.AbsLoader<ViewNearbyItem, BeanNearbyItem> loader; public static Fragment newInstance(Bundle arg) { return new FragmentNearby(); } @Override protected int onLoadViewResource() { return R.layout.fragment_nearby; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onViewDidLoad(Bundle savedInstanceState) { super.onViewDidLoad(savedInstanceState); mDataSource = new ArrayList<BeanNearbyItem>(); loader = new AbsWorker.AbsLoader<ViewNearbyItem, BeanNearbyItem>() { @Override public String parseNextUrl(JSONObject response) { return Constant.API; } @Override public JSONObject parseNextJSON(JSONObject response) { ResponseNearby responseNearby = JacksonWrapper.json2Bean( response, ResponseNearby.class); ArrayList<BeanNearbyItem> data = responseNearby.getReturnData() .getContData(); if (data.size() > 0) { final Application.AppExtraInfo info = Application .getInstance().getAppExtraInfo(); int lastId = data.get(data.size() - 1).getSortId(); return U.buildNearby(info.lat, info.lon, false, lastId); } return null; } @Override public ArrayList<BeanNearbyItem> parseJSON2ArrayList( JSONObject response) { L.dbg(TAG + response.toString()); ResponseNearby responseNearby = JacksonWrapper.json2Bean( response, ResponseNearby.class); // return responseNearby.getReturnData().getContData(); ArrayList<BeanNearbyItem> arrayList = new ArrayList<BeanNearbyItem>(); L.dbg("FragmentNearby response :" + response); if (responseNearby != null && responseNearby.getReturnData() != null) { if(responseNearby.getReturnData().getContData() != null) { arrayList = responseNearby.getReturnData().getContData(); if(mNetworkListView.isLoadMore()) { mDataSource.addAll(arrayList); }else { mDataSource.clear();; mDataSource.addAll(arrayList); } } } else { L.dbg("FragmentNearby response is error !"); } return arrayList; } @Override public void updateItemUI(int position, final BeanNearbyItem data, ViewNearbyItem itemView) { ViewNearbyItem view = (ViewNearbyItem) itemView; view.setData(data, position); // like unlike LikePanelHolder.Extra extra = new LikePanelHolder.Extra(); extra.aid = data.getAnsId(); extra.qid = data.getQuestId(); LikePanelHolder holder = new LikePanelHolder(extra, itemView) { @Override public void onPostSuccess(boolean isLike) { super.onPostSuccess(isLike); } }; holder.setData(data); setupLikePanel(position, data, itemView); } private void setupLikePanel(final int position, BeanNearbyItem data, final View itemView) { LikePanelHolder.Extra extra = new LikePanelHolder.Extra(); extra.aid = data.getAnsId(); extra.qid = data.getQuestId(); LikePanelHolder likePanelHolder = new LikePanelHolder(extra, itemView) { @Override public void onPostSuccess(boolean isLike) { } @Override public void onPrePost(boolean isLike) { super.onPrePost(isLike); int count = isLike ? Integer.valueOf(like.getText() .toString()) : Integer.valueOf(unLike.getText() .toString()); count++; if (isLike) { mDataSource.get(position).setLikeFlag(1); mDataSource.get(position).setLikeNum(count); } else { mDataSource.get(position).setLikeFlag(2); mDataSource.get(position).setUnlikeNum(count); } ViewNearbyItem.expandPosition = position; mNetworkListView.notifyDataSetChanged(); } }; likePanelHolder.listenForChecking(); } @Override public ViewNearbyItem makeItem(LayoutInflater inflater, int position, View convertView, ViewGroup parent) { return new ViewNearbyItem(getActivity()); } }; requestListWhenLocated(); mNetworkListView.setEmptyView(EmptyHelper.getEmptyView(getActivity(), R.drawable.bg_nearby_empty, R.string.nearby_empty)); } private void requestListWhenLocated() { LocationManager.getInstance().requestLocation( new LocationManager.JLsn() { @Override public void onResult(double latitude, double longitude, BDLocation location) { Application.getInstance().setAppExtraInfo( Device.getId(Application.getInstance() .getApplicationContext()), latitude, longitude); Application.getInstance().mAppExtraInfo.city = location .getCity(); String city = getString(R.string.app_name); if (!TextUtils.isEmpty(Application.getInstance().mAppExtraInfo.city)) { city = location.getCity(); } getActivity().setTitle(city); registerDevice(); refreshActivityTitle(); } }); } private void registerDevice() { Http http = new Http(TAG); final Application.AppExtraInfo info = Application.getInstance() .getAppExtraInfo(); JSONObject jsonObject = U.buildRegister(); L.dbg("register post :" + jsonObject); http.url(Constant.API).JSON(jsonObject).post(new HttpCallBack() { @Override public void onResponse(JSONObject response) { super.onResponse(response); L.dbg(TAG + " register : " + response); // request url when located and registered JSONObject jo = U.buildNearby(info.lat, info.lon, true, 0); mNetworkListView.request(API, loader, jo); } }); } private void refreshActivityTitle() { Http http = new Http(); JSONObject jo = U.buildGetSchoolName(); http.url(Constant.API).JSON(jo).post(new HttpCallBack() { @Override public void onResponse(JSONObject response) { super.onResponse(response); if (response == null) { L.dbg("server error"); return; } L.dbg("refresh title" + response); JSONObject returnData = response.optJSONObject("returnData"); String locDesc = returnData.optString("locDesc", null); if (returnData != null && !TextUtils.isEmpty(locDesc)) { ActivityTab activityTab = (ActivityTab) getActivity(); L.dbg("locDesc tile : " + locDesc); Application.getInstance().getAppExtraInfo().school = locDesc; activityTab.setLocTitle(locDesc); } else { L.dbg("refresh title error"); } } }); } @Override public void onPause() { super.onPause(); ViewNearbyItem.expandPosition = ViewNearbyItem.NO_EXPAND; } }