package net.coding.program.search; import android.view.View; import android.widget.AbsListView; import android.widget.LinearLayout; import android.widget.ListView; import net.coding.program.R; import net.coding.program.common.Global; import net.coding.program.common.adapter.SearchUserAdapter; import net.coding.program.common.network.RefreshBaseFragment; import net.coding.program.model.UserObject; import net.coding.program.user.UserDetailActivity_; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.ItemClick; import org.androidannotations.annotations.ViewById; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; /** * Created by Vernon on 15/11/30. */ @EFragment(R.layout.fragment_search_list) public class SearchUserFragment extends RefreshBaseFragment { private static final String TAG = SearchTaskFragment.class.getSimpleName(); final String url = Global.HOST_API + "/esearch/all?q=%s"; final String tmp = "&types=%s&pageSize=10"; String page = "&page=%s"; int pos = 1; ArrayList<UserObject> mData = new ArrayList<>(); private String keyword = ""; private String tabPrams; private boolean hasMore = true; @ViewById ListView listView; @ViewById(R.id.emptyView) LinearLayout emptyView; SearchUserAdapter adapter; @AfterViews protected void init() { initRefreshLayout(); setRefreshing(true); mFootUpdate.init(listView, mInflater, this); adapter = new SearchUserAdapter(mData, keyword, getActivity()); listView.setAdapter(adapter); listView.setOnScrollListener(mOnScrollListener); loadMore(); } @ItemClick final void listView(UserObject itemData) { UserDetailActivity_.intent(this).globalKey(itemData.global_key.replace("<em>", "").replace("</em>", "")).start(); } 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) { if (hasMore) { pos++; loadMore(); } } } }; public String getKeyword() { return keyword; } public String getTabPrams() { return tabPrams; } public void setTabPrams(String tabPrams) { this.tabPrams = tabPrams; } public void setKeyword(String keyword) { this.keyword = keyword; } private String getUrl(int pos) { String tag = ""; tag = String.format(url, getKeyword()) + String.format(tmp, getTabPrams()) + String.format(page, pos + ""); return tag; } @Override public void loadMore() { getNetwork(getUrl(pos), keyword); } @Override public void onRefresh() { pos = 1; loadMore(); } @Override public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException { if (tag.equals(keyword)) { setRefreshing(false); if (code == 0) { if (pos == 1) { mData.clear(); } JSONArray array = respanse.getJSONObject("data").getJSONObject("friends").getJSONArray("list"); for (int i = 0; i < array.length(); ++i) { JSONObject item = array.getJSONObject(i); UserObject oneData = new UserObject(item); mData.add(oneData); } emptyView.setVisibility(mData.size() == 0 ? View.VISIBLE : View.GONE); if (array.length() > 0) { mFootUpdate.updateState(code, false, mData.size()); hasMore = true; } else { hasMore = false; mFootUpdate.updateState(code, true, mData.size()); } adapter.notifyDataSetChanged(); } else { showErrorMsg(code, respanse); hasMore = false; } } } }