package com.jaf.biubiu; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.jaf.bean.BeanNearbyItem; import com.jaf.bean.BeanRequestTopicQuestionList; import com.jaf.bean.ResponseTopicQuestions; import com.jaf.jcore.AbsWorker; import com.jaf.jcore.BindView; import com.jaf.jcore.BindableFragment; import com.jaf.jcore.JacksonWrapper; import com.jaf.jcore.NetworkListView; import org.json.JSONObject; import java.io.Serializable; import java.util.ArrayList; /** * Created by jarrah on 2015/4/14. * 一个完整问答 来自 板块 */ public class FragmentQATopic extends BindableFragment implements Constant{ private static final String TAG = "FragmentQuestionList"; public static final String KEY_REQUEST = "request_json"; private int mUnionId; private ArrayList<BeanNearbyItem> mDataSource; public FragmentQATopic() {} @BindView(id = R.id.networkListView) private NetworkListView<ViewNearbyItem, BeanNearbyItem> mNetworkListView; private AbsWorker.AbsLoader<ViewNearbyItem, BeanNearbyItem> loader; public static Fragment newInstance(BeanRequestTopicQuestionList arg) { FragmentQATopic f = new FragmentQATopic(); Bundle b = new Bundle(); b.putSerializable(KEY_REQUEST, arg); f.setArguments(b); return f; } @Override protected int onLoadViewResource() { return R.layout.fragment_question_list; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onViewDidLoad(Bundle savedInstanceState) { super.onViewDidLoad(savedInstanceState); ViewNearbyItem.resetExpandPosition(); 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) { ResponseTopicQuestions r = JacksonWrapper.json2Bean(response, ResponseTopicQuestions.class); ArrayList<BeanNearbyItem> data = r.getReturnData().getContData(); if(data.size() > 0 ) { int lastId = data.get(data.size() - 1).getSortId(); return U.buildTopicQuestion(false, lastId, mUnionId); } return null; } @Override public ArrayList<BeanNearbyItem> parseJSON2ArrayList(JSONObject response) { L.dbg("fragment question response " + response.toString()); ResponseTopicQuestions r = JacksonWrapper.json2Bean(response, ResponseTopicQuestions.class); ArrayList<BeanNearbyItem> array = new ArrayList<BeanNearbyItem>(); if(r.getReturnData() != null && r.getReturnData().getContData() != null) { array = r.getReturnData().getContData(); if(mNetworkListView.isLoadMore()) { mDataSource.addAll(array); }else{ mDataSource.clear(); mDataSource.addAll(array); } } return array; } @Override public void updateItemUI(int position, final BeanNearbyItem data, ViewNearbyItem itemView) { itemView.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); } @Override public ViewNearbyItem makeItem(LayoutInflater inflater, int position, View convertView, ViewGroup parent) { return new ViewNearbyItem(getActivity()); } }; mNetworkListView.setEmptyView(EmptyHelper.getEmptyView(getActivity(), R.drawable.bg_nearby_empty, R.string.no_topic)); doRequest(); } 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(); } private void doRequest() { Serializable serializable = getArguments().getSerializable(KEY_REQUEST); if (getArguments() != null && serializable != null) { BeanRequestTopicQuestionList request = (BeanRequestTopicQuestionList) serializable; mUnionId = request.getUnionId(); mNetworkListView.request(Constant.API, loader, U.buildTopicQuestion(true, 0, request.getUnionId())); }else { L.dbg(TAG + " do request but data is null!"); } } @Override public void onPause() { super.onPause(); ViewNearbyItem.resetExpandPosition(); } }