package net.coding.program.user; import android.app.Activity; import android.content.Intent; import android.support.v4.app.FragmentActivity; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import net.coding.program.R; import net.coding.program.common.BlankViewDisplay; import net.coding.program.common.Global; import net.coding.program.common.ImageLoadTool; import net.coding.program.common.network.RefreshBaseFragment; import net.coding.program.model.ProjectObject; import net.coding.program.model.UserObject; import net.coding.program.project.ProjectHomeActivity_; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.FragmentArg; 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; @EFragment(R.layout.fragment_user_project_list) public class UserProjectListFragment extends RefreshBaseFragment { @FragmentArg Type mType; @FragmentArg UserObject mUserObject; // 可选,true表示选择项目 @FragmentArg boolean mPickProject; @ViewById ListView listView; @ViewById View blankLayout; String mUrl; ArrayList<ProjectObject> mData = new ArrayList<>(); View.OnClickListener onClickRetry = new View.OnClickListener() { @Override public void onClick(View v) { onRefresh(); } }; BaseAdapter mAdapter = new BaseAdapter() { @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { ProjectObject item = (ProjectObject) getItem(position); if (item.description.isEmpty()) { return 1; } else { return 0; } } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; final ViewHolder holder; if (convertView == null) { int layoutRes = getItemViewType(position) == 0 ? R.layout.user_project_all_list_item : R.layout.user_project_all_list_item2; view = mInflater.inflate(layoutRes, parent, false); holder = new ViewHolder(); holder.name = (TextView) view.findViewById(R.id.name); holder.image = (ImageView) view.findViewById(R.id.icon); holder.descrip = (TextView) view.findViewById(R.id.description); holder.star = (TextView) view.findViewById(R.id.star); holder.watch = (TextView) view.findViewById(R.id.watch); holder.fork = (TextView) view.findViewById(R.id.folk); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } ProjectObject item = (ProjectObject) getItem(position); holder.name.setText(item.name); holder.descrip.setText(item.description); holder.star.setText(String.valueOf(item.star_count)); holder.watch.setText(String.valueOf(item.watch_count)); holder.fork.setText(String.valueOf(item.fork_count)); iconfromNetwork(holder.image, item.icon, ImageLoadTool.optionsRounded2); if (position == (getCount() - 1)) { loadMore(); } return view; } }; @AfterViews protected final void init() { initRefreshLayout(); listView.setAdapter(mAdapter); switch (mType) { case stared: mUrl = Global.HOST_API + "/user/" + mUserObject.global_key + "/public_projects?type=stared"; break; case all_private: mUrl = Global.HOST_API + "/projects?page=1&pageSize=1000&type=all"; // 没有取私有的api,只好取全部然后本地过滤 break; default: // 0 mUrl = Global.HOST_API + "/user/" + mUserObject.global_key + "/public_projects?type=joined"; break; } loadMore(); } @Override public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException { if (tag.equals(mUrl)) { setRefreshing(false); if (code == 0) { if (isLoadingFirstPage(tag)) { mData.clear(); } JSONArray jsonArray = respanse.optJSONObject("data").optJSONArray("list"); for (int i = 0; i < jsonArray.length(); ++i) { JSONObject json = jsonArray.getJSONObject(i); ProjectObject projectObject = new ProjectObject(json); if (mType == Type.all_private) { if (!projectObject.isPublic()) { mData.add(projectObject); } } else { mData.add(projectObject); } } mFootUpdate.updateState(code, isLoadingLastPage(tag), mData.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); } } } @ItemClick protected final void listView(ProjectObject projectObject) { if (mPickProject) { Intent intent = new Intent(); intent.putExtra("data", projectObject); FragmentActivity activity = getActivity(); activity.setResult(Activity.RESULT_OK, intent); activity.finish(); } else { ProjectHomeActivity_ .intent(this) .mProjectObject(projectObject) .start(); } } @Override public void onRefresh() { initSetting(); loadMore(); } @Override public void loadMore() { getNextPageNetwork(mUrl, mUrl); } public enum Type { joined, stared, all_private } private static class ViewHolder { TextView name; ImageView image; TextView descrip; TextView star; TextView watch; TextView fork; } }