package net.coding.program.subject; import android.view.View; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.ListView; import net.coding.program.MyApp; import net.coding.program.R; import net.coding.program.common.BlankViewDisplay; import net.coding.program.common.Global; import net.coding.program.common.MyImageGetter; import net.coding.program.common.network.RefreshBaseFragment; import net.coding.program.model.Subject; import net.coding.program.subject.adapter.SubjectListItemAdapter; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.FragmentArg; 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-18. */ @EFragment(R.layout.fragment_subject_list) public class SubjectListFragment extends RefreshBaseFragment { final String subjectFollowUrlFormat = Global.HOST_API + "/user/%s/tweet_topic/watched?extraInfo=1"; final String subjectJoinUrlFormat = Global.HOST_API + "/user/%s/tweet_topic/joined?extraInfo=1"; final String subjectHotTweetUrl = Global.HOST_API + "/tweet_topic/hot?page=1&pageSize=20"; final String subjectFollowTag = "subject_follow"; final String subjectJoinTag = "subject_join"; final String subjectHotTweetTag = "subject_hot"; @FragmentArg Type mType; @FragmentArg String userKey; @ViewById ListView listView; @ViewById View blankLayout; SubjectListItemAdapter mAdapter = null; private List<Subject.SubjectDescObject> mSubjectList = new ArrayList<Subject.SubjectDescObject>(); private MyImageGetter mMyImageGetter; @AfterViews protected void init() { initRefreshLayout(); setRefreshing(true); if (mType != Type.hot) mFootUpdate.init(listView, mInflater, this); mMyImageGetter = new MyImageGetter(getActivity()); mAdapter = new SubjectListItemAdapter(getActivity(), mSubjectList, mMyImageGetter); listView.setAdapter(mAdapter); listView.setOnItemClickListener(onItemClickListener); listView.setOnScrollListener(mOnScrollListener); loadMore(); } 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(); } } }; public enum Type { follow, join, hot } @Override public void onRefresh() { initSetting(); loadMore(); } @Override public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException { if (tag.equals(getCurTag())) { setRefreshing(false); if (code == 0) { if (isLoadingFirstPage(tag)) { mSubjectList.clear(); } JSONArray jsonArray = null; if (mType == Type.hot) { jsonArray = respanse.optJSONArray("data"); } else { jsonArray = respanse.optJSONObject("data").optJSONArray("list"); } for (int i = 0; i < jsonArray.length(); ++i) { JSONObject json = jsonArray.getJSONObject(i); Subject.SubjectDescObject projectObject = new Subject.SubjectDescObject(json); mSubjectList.add(projectObject); } if (mType != Type.hot) mFootUpdate.updateState(code, isLoadingLastPage(tag), mSubjectList.size()); String tip = BlankViewDisplay.OTHER_SUBJECT_BLANK; if (userKey.equals(MyApp.sUserObject.global_key)) { tip = BlankViewDisplay.MY_SUBJECT_BLANK; } BlankViewDisplay.setBlank(mSubjectList.size(), this, true, blankLayout, null, tip); mAdapter.notifyDataSetChanged(); } else { showErrorMsg(code, respanse); } } } @Override public void loadMore() { if (mType == Type.hot) { getNetwork(getUrl(), getCurTag()); } else getNextPageNetwork(getUrl(), getCurTag()); } private String getUrl() { String url = ""; if (mType == Type.follow) { url = String.format(subjectFollowUrlFormat, userKey); } else if (mType == Type.join) { url = String.format(subjectJoinUrlFormat, userKey); } else if (mType == Type.hot) { url = subjectHotTweetUrl; } return url; } private String getCurTag() { String tag = ""; if (mType == Type.follow) { tag = subjectFollowTag; } else if (mType == Type.join) { tag = subjectJoinTag; } else if (mType == Type.hot) { tag = subjectHotTweetTag; } return tag; } private AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int pos = position; if (pos >= 0 && pos < mSubjectList.size()) { SubjectDetailActivity_.intent(getActivity()).subjectDescObject(mSubjectList.get(pos)).start(); } } }; }