package net.coding.program.subject; import android.app.Activity; import android.content.Intent; import android.view.View; import android.widget.AbsListView; import android.widget.CheckBox; import android.widget.ListView; import com.loopj.android.http.RequestParams; import net.coding.program.FootUpdate; import net.coding.program.R; import net.coding.program.common.Global; import net.coding.program.common.network.RefreshBaseFragment; import net.coding.program.model.UserObject; import net.coding.program.subject.adapter.SubjectUserListAdapter; import net.coding.program.user.UserDetailActivity_; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.FragmentArg; import org.androidannotations.annotations.ItemClick; import org.androidannotations.annotations.OnActivityResult; import org.androidannotations.annotations.ViewById; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; /** * Created by david on 15-7-28. */ @EFragment(R.layout.fragment_subject_list) public class SubjectUserFragment extends RefreshBaseFragment implements FootUpdate.LoadMore { public static final String HOST_FOLLOW = Global.HOST_API + "/user/follow?"; public static final String HOST_UNFOLLOW = Global.HOST_API + "/user/unfollow?"; final String subjectUserListUrlFormat = Global.HOST_API + "/tweet_topic/%s/joined?pageSize=10"; final String subjectUserListTag = "subject_user_list_tag"; static final int RESULT_USER_DETAIL = 5; @FragmentArg int topicId; @ViewById ListView listView; @ViewById View blankLayout; SubjectUserListAdapter mAdapter = null; private List<UserObject> mUserList = new ArrayList<>(); @AfterViews protected void init() { initRefreshLayout(); setRefreshing(true); mFootUpdate.init(listView, mInflater, this); mAdapter = new SubjectUserListAdapter(getActivity(), mUserList); mAdapter.setFollowClickListener(mFollowClickListener); listView.setAdapter(mAdapter); listView.setOnScrollListener(mOnScrollListener); loadMore(); } private AbsListView.OnScrollListener mOnScrollListener = new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem + visibleItemCount >= totalItemCount) { loadMore(); } } }; @Override public void onRefresh() { initSetting(); loadMore(); } @ItemClick final void listView(UserObject itemData) { UserDetailActivity_.intent(this).globalKey(itemData.global_key).startForResult(RESULT_USER_DETAIL); } @OnActivityResult(RESULT_USER_DETAIL) final void resultUserDetail(int result, Intent data) { if (result == Activity.RESULT_OK) { UserObject userObject = (UserObject) data.getSerializableExtra("data"); for (int i = 0; i < mUserList.size(); ++i) { if (mUserList.get(i).id == userObject.id) { mUserList.remove(i); mUserList.add(i, userObject); mAdapter.notifyDataSetChanged(); return; } } } } @Override public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException { if (tag.equals(subjectUserListTag)) { setRefreshing(false); if (code == 0) { if (isLoadingFirstPage(tag)) { mUserList.clear(); } JSONArray jsonArray = respanse.optJSONObject("data").optJSONArray("list"); for (int i = 0; i < jsonArray.length(); ++i) { JSONObject json = jsonArray.getJSONObject(i); UserObject projectObject = new UserObject(json); mUserList.add(projectObject); } mFootUpdate.updateState(code, isLoadingLastPage(tag), mUserList.size()); // String tip = BlankViewDisplay.OTHER_PROJECT_BLANK; // if (mUserObject.isMe()) { // tip = BlankViewDisplay.MY_PROJECT_BLANK; // } // BlankViewDisplay.setBlank(mData.size(), this, true, blankLayout, onClickRetry, tip); mAdapter.notifyDataSetChanged(); } else { showErrorMsg(code, respanse); } } else if (tag.equals(HOST_FOLLOW)) { if (code == 0) { showButtomToast(R.string.follow_success); mUserList.get(pos).followed = true; } else { showButtomToast(R.string.follow_fail); } mAdapter.notifyDataSetChanged(); } else if (tag.equals(HOST_UNFOLLOW)) { if (code == 0) { showButtomToast(R.string.unfollow_success); mUserList.get(pos).followed = false; } else { showButtomToast(R.string.unfollow_fail); } mAdapter.notifyDataSetChanged(); } } @Override public void loadMore() { getNextPageNetwork(getUrl(), subjectUserListTag); } private String getUrl() { return String.format(subjectUserListUrlFormat, topicId); } private View.OnClickListener mFollowClickListener = new View.OnClickListener() { @Override public void onClick(View v) { int pos = Integer.valueOf(v.getTag().toString()); UserObject data = mUserList.get(pos); if (data != null) { RequestParams params = new RequestParams(); params.put("users", data.global_key); if (((CheckBox) v).isChecked()) { postNetwork(HOST_FOLLOW, params, HOST_FOLLOW, pos, null); } else { postNetwork(HOST_UNFOLLOW, params, HOST_UNFOLLOW, pos, null); } } } }; }