diff --git a/app/src/main/java/com/gh/base/fragment/BaseFragment.java b/app/src/main/java/com/gh/base/fragment/BaseFragment.java index 329915e138..cb182050da 100644 --- a/app/src/main/java/com/gh/base/fragment/BaseFragment.java +++ b/app/src/main/java/com/gh/base/fragment/BaseFragment.java @@ -51,16 +51,16 @@ public abstract class BaseFragment extends Fragment implements OnRequestCallB protected final Handler mBaseHandler = new BaseFragment.BaseHandler(this); protected static class BaseHandler extends Handler { - private final WeakReference mfragmentWeakReference; + private final WeakReference mFragmentWeakReference; BaseHandler(BaseFragment fragment) { - mfragmentWeakReference = new WeakReference<>(fragment); + mFragmentWeakReference = new WeakReference<>(fragment); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); - mfragmentWeakReference.get().handleMessage(msg); + mFragmentWeakReference.get().handleMessage(msg); } } diff --git a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java index 3038a5c388..7336b88b6a 100644 --- a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java @@ -41,7 +41,6 @@ import com.gh.gamecenter.entity.InstallGameEntity; import com.gh.gamecenter.entity.SuggestionTypeEntity; import com.gh.gamecenter.entity.UserInfoEntity; import com.gh.gamecenter.manager.UserManager; -import com.gh.gamecenter.retrofit.JSONObjectResponse; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; import com.gh.gamecenter.suggest.SuggestPicAdapter; @@ -49,6 +48,7 @@ import com.gh.gamecenter.suggest.SuggestSelectGameAdapter; import com.gh.gamecenter.suggest.SuggestTypeAdapter; import com.google.gson.Gson; import com.halo.assistant.HaloApp; +import com.lightgame.config.CommonDebug; import com.lightgame.download.FileUtils; import com.lightgame.utils.Util_System_Keyboard; import com.lightgame.utils.Util_System_Phone_State; @@ -74,6 +74,7 @@ import butterknife.BindView; import butterknife.OnClick; import okhttp3.MediaType; import okhttp3.RequestBody; +import okhttp3.ResponseBody; import retrofit2.HttpException; import rx.Observable; import rx.Observer; @@ -550,35 +551,29 @@ public class SuggestionActivity extends BaseActivity implements SuggestTypeAdapt RetrofitManager.getInstance(this).getApi().postSuggestion(body) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new JSONObjectResponse() { + .subscribe(new Response() { @Override - public void onResponse(JSONObject response) { + public void onResponse(ResponseBody response) { if (postDialog != null) { postDialog.dismissAllowingStateLoss(); } - if (response.length() != 0) { - try { - if ("ok".equals(response.getString("status"))) { - toast("感谢您的反馈!"); - setResult(SUGGEST_TYPE_REQUEST); - finish(); - } else { - toast("提交失败,请稍后尝试!"); - } - } catch (JSONException e) { - e.printStackTrace(); - } - } else { - toast("提交失败,请稍后尝试!"); + toast("感谢您的反馈!"); + setResult(SUGGEST_TYPE_REQUEST); + finish(); + try { + Utils.log("sendSuggestion::onResponse->" + response.string()); + } catch (IOException e) { + e.printStackTrace(); } } @Override public void onFailure(HttpException e) { try { - if (e != null) { + if (CommonDebug.IS_DEBUG && e != null) { String string = e.response().errorBody().string(); + Utils.log("sendSuggestion::onFailure->" + string); } } catch (IOException e1) { e1.printStackTrace(); diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskFragment.java b/app/src/main/java/com/gh/gamecenter/ask/AskFragment.java index 051d44da47..c90427597d 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskFragment.java @@ -114,7 +114,7 @@ public class AskFragment extends BaseFragment { private void initViewPager() { ArrayList fragmentList = new ArrayList<>(); - fragmentList.add(new AskQuestionsHotFragment()); + fragmentList.add(new AskQuestionsRecommendsFragment()); fragmentList.add(new AskQuestionsNewFragment()); mAskViewpager.setAdapter(new FragmentAdapter(getChildFragmentManager(), fragmentList)); mAskViewpager.setScrollable(false); diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotAdapter.java deleted file mode 100644 index 2ae9bab14e..0000000000 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotAdapter.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.gh.gamecenter.ask; - -import android.content.Context; -import android.support.v7.widget.RecyclerView; -import android.view.View; -import android.view.ViewGroup; - -import com.gh.base.OnListClickListener; -import com.gh.common.constant.ItemViewType; -import com.gh.gamecenter.R; -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; -import com.gh.gamecenter.ask.entity.AnswerEntity; -import com.gh.gamecenter.baselist.ListAdapter; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by khy on 2/12/17. - */ - -public class AskQuestionsHotAdapter extends ListAdapter { - - private OnListClickListener mListClickListener; - - public AskQuestionsHotAdapter(Context context, OnListClickListener listClickListener) { - super(context); - mListClickListener = listClickListener; - } - - @Override - protected void setListData(List updateData) { -// super.setListData(updateData); 用DiffUtil会出现诡异的动画 - mEntityList = new ArrayList<>(updateData); - notifyDataSetChanged(); - } - - @Override - protected boolean areContentsTheSame(AnswerEntity oldItem, AnswerEntity newItem) { - return oldItem.getId() != null && oldItem.getId().equals(newItem.getId()); - } - - @Override - public int getItemViewType(int position) { - if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER; - return ItemViewType.ITEM_BODY; - } - - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view; - switch (viewType) { - case ItemViewType.ITEM_FOOTER: - view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); - return new FooterViewHolder(view, mListClickListener); - case ItemViewType.ITEM_BODY: - view = mLayoutInflater.inflate(R.layout.ask_questions_hot_item, parent, false); - return new AskQuestionsHotViewHolder(view, mListClickListener); - default: - return null; - } - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - switch (getItemViewType(position)) { - case ItemViewType.ITEM_BODY: - ((AskQuestionsHotViewHolder) holder).initQuestionsHotViewHolder(mEntityList.get(position)); - break; - case ItemViewType.ITEM_FOOTER: - FooterViewHolder footerViewHolder = (FooterViewHolder) holder; - footerViewHolder.initItemPadding(); - footerViewHolder.initFooterViewHolder(mIsNetworkError, mIsOver, R.string.ask_loadover_hint); - break; - } - } - - @Override - public int getItemCount() { - return mEntityList == null || mEntityList.isEmpty() ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT; - } -} diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsRecommendsAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsRecommendsAdapter.java new file mode 100644 index 0000000000..9cc58c10f6 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsRecommendsAdapter.java @@ -0,0 +1,151 @@ +package com.gh.gamecenter.ask; + +import android.content.Context; +import android.support.v4.view.ViewPager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ProgressBar; + +import com.gh.base.OnListClickListener; +import com.gh.common.constant.ItemViewType; +import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.ask.entity.AnswerEntity; +import com.gh.gamecenter.ask.entity.AskSubjectEntity; +import com.gh.gamecenter.baselist.ListAdapter; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by khy on 2/12/17. + */ + +public class AskQuestionsRecommendsAdapter extends ListAdapter { + + public static final int MAX_PROGRESS = 300; + + private OnListClickListener mListClickListener; + private OnSubjectProgressListener mProgressListener; + + private List mSubjectEntity; + + private ProgressBar mSubjectProgressBar; + private ViewPager mSubjectViewPager; + + public AskQuestionsRecommendsAdapter(Context context, OnListClickListener listClickListener, OnSubjectProgressListener progressListener) { + super(context); + mProgressListener = progressListener; + mListClickListener = listClickListener; + } + + public void setSubjectEntity(List subjectEntity) { + mSubjectEntity = subjectEntity; + notifyDataSetChanged(); + } + + @Override + protected void setListData(List updateData) { +// super.setListData(updateData); 用DiffUtil会出现诡异的动画 + mEntityList = new ArrayList<>(updateData); + notifyDataSetChanged(); + } + + @Override + protected boolean areContentsTheSame(AnswerEntity oldItem, AnswerEntity newItem) { + return oldItem.getId() != null && oldItem.getId().equals(newItem.getId()); + } + + @Override + public int getItemViewType(int position) { + if (position == 0 && mSubjectEntity != null && mSubjectEntity.size() > 0) + return ItemViewType.ITEM_TOP; + if (position == getItemCount() - 1) + return ItemViewType.ITEM_FOOTER; + return ItemViewType.ITEM_BODY; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view; + switch (viewType) { + case ItemViewType.ITEM_TOP: + view = mLayoutInflater.inflate(R.layout.ask_recommends_subject, parent, false); + return new AskSubjectViewHolder(view); + case ItemViewType.ITEM_FOOTER: + view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); + return new FooterViewHolder(view, mListClickListener); + case ItemViewType.ITEM_BODY: + view = mLayoutInflater.inflate(R.layout.ask_questions_hot_item, parent, false); + return new AskQuestionsRecommendsViewHolder(view, mListClickListener); + default: + return null; + } + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + switch (getItemViewType(position)) { + case ItemViewType.ITEM_TOP: + AskSubjectViewHolder subjectViewHolder = (AskSubjectViewHolder) holder; + subjectViewHolder.mSubjectProgress.setMax(MAX_PROGRESS); + mSubjectProgressBar = subjectViewHolder.mSubjectProgress; + mSubjectViewPager = subjectViewHolder.mSubjectViewPager; + if (subjectViewHolder.mSubjectViewPager.getAdapter() == null) { + subjectViewHolder.mSubjectViewPager.setAdapter(new AskSubjectPageAdapter(mContext, mSubjectEntity)); + mProgressListener.onStartProgress(); + subjectViewHolder.mSubjectViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + mProgressListener.onStartProgress(); // 每次滑动完成重新启动进度条 + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + } + break; + case ItemViewType.ITEM_BODY: + int index = mSubjectEntity == null ? position : position - TOP_ITEM_COUNT; + ((AskQuestionsRecommendsViewHolder) holder).initQuestionsHotViewHolder(mEntityList.get(index)); + break; + case ItemViewType.ITEM_FOOTER: + FooterViewHolder footerViewHolder = (FooterViewHolder) holder; + footerViewHolder.initItemPadding(); + footerViewHolder.initFooterViewHolder(mIsNetworkError, mIsOver, R.string.ask_loadover_hint); + break; + } + } + + void setSubjectProgress(int progress) { + if (mSubjectProgressBar != null) mSubjectProgressBar.setProgress(progress); + if (progress == MAX_PROGRESS && mSubjectViewPager != null) { + int currentItem = mSubjectViewPager.getCurrentItem(); + mSubjectViewPager.setCurrentItem(++currentItem, true); + } + } + + @Override + public int getItemCount() { + int index = 0; + if (mSubjectEntity != null && mSubjectEntity.size() > 0) + index += TOP_ITEM_COUNT; + if (mEntityList != null) + index += mEntityList.size(); + if (mEntityList != null || mSubjectEntity != null && mSubjectEntity.size() > 0) + index += FOOTER_ITEM_COUNT; + return index; + } + + interface OnSubjectProgressListener { + void onStartProgress(); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotFragment.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsRecommendsFragment.java similarity index 56% rename from app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotFragment.java rename to app/src/main/java/com/gh/gamecenter/ask/AskQuestionsRecommendsFragment.java index fc718512ff..7e01798c29 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsRecommendsFragment.java @@ -3,6 +3,7 @@ package com.gh.gamecenter.ask; import android.app.Activity; import android.content.Intent; import android.os.Bundle; +import android.os.Message; import android.support.annotation.Nullable; import android.view.View; @@ -15,6 +16,7 @@ import com.gh.gamecenter.ask.entity.AnswerEntity; import com.gh.gamecenter.ask.entity.Questions; import com.gh.gamecenter.ask.questionsdetail.QuestionsDetailFragment; import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.baselist.LoadStatus; import com.gh.gamecenter.baselist.LoadType; import butterknife.BindView; @@ -26,14 +28,34 @@ import static com.gh.gamecenter.ask.AskFragment.COMMUNITIES_SELECT_REQUEST; * Created by khy on 2/12/17. */ -public class AskQuestionsHotFragment extends ListFragment { +public class AskQuestionsRecommendsFragment extends ListFragment + implements AskQuestionsRecommendsAdapter.OnSubjectProgressListener { @BindView(R.id.reuse_nodata_skip_tv_btn) View mSkipHint; - private AskQuestionsHotAdapter mAdapter; + public static final int VIEWPAGER_INTERVAL = 3000; + + private AskQuestionsRecommendsAdapter mAdapter; + private CheckLoginUtils.OnLoginListener mOnLoginListener; + @Override + protected void handleMessage(Message msg) { + if (msg.what == 0) { // 验证码倒计时 + int arg1 = msg.arg1; + arg1++; + if (arg1 <= AskQuestionsRecommendsAdapter.MAX_PROGRESS) { + if (mAdapter != null) mAdapter.setSubjectProgress(arg1); + Message message = new Message(); + message.what = 0; + message.arg1 = arg1; + mBaseHandler.sendMessageDelayed(message + , VIEWPAGER_INTERVAL / AskQuestionsRecommendsAdapter.MAX_PROGRESS); + } + } + } + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -41,25 +63,51 @@ public class AskQuestionsHotFragment extends ListFragment { - if (status != null) { - switch (status) { - case REFRESH_FAILED: - toast("刷新失败"); + mListViewModel.getRefreshCount().observe(this, integer -> { + if (integer != null) { + switch (integer) { + case 0: + toast("已经没有新内容咯,请稍后再试"); break; - case REFRESH_LOADED: + case -1: + toast("获取失败,请检查网络设置"); break; - case REFRESH_OVER: - toast("刷新完毕"); + default: + toast("成功获取" + integer + "条新内容"); break; - } - if (mListRefresh.isRefreshing()) { - mListRefresh.setRefreshing(false); + } } + + if (mListRefresh.isRefreshing()) { + mListRefresh.setRefreshing(false); + } + }); + + mListViewModel.getSubjectLiveData().observe(this, entityList -> { + mAdapter.setSubjectEntity(entityList); }); } + @Override + public void onLoadEmpty() { + if (mListViewModel.getSubjectLiveData().getValue() != null) { + super.onLoadDone(); + mAdapter.loadChange(LoadStatus.LIST_OVER); + } else { + super.onLoadEmpty(); + } + } + + @Override + public void onLoadError() { + if (mListViewModel.getSubjectLiveData().getValue() != null) { + super.onLoadDone(); + mAdapter.loadChange(LoadStatus.LIST_FAILED); + } else { + super.onLoadError(); + } + } @Override protected int getLayoutId() { @@ -78,8 +126,8 @@ public class AskQuestionsHotFragment extends ListFragment { +public class AskQuestionsRecommendsViewHolder extends BaseRecyclerViewHolder { @BindView(R.id.ask_item_usericon) @@ -36,7 +36,7 @@ public class AskQuestionsHotViewHolder extends BaseRecyclerViewHolder { +public class AskQuestionsRecommendsViewModel extends ListViewModel { + + /** + * 等于 0 刷新结束(没有内容了) + * 小于 0 刷新失败 + * 大于 0 刷新成功(数量) + */ + private MutableLiveData mRefreshCount = new MutableLiveData<>(); private MutableLiveData> mLiveData = new MutableLiveData<>(); + private MutableLiveData> mSubjectLiveData = new MediatorLiveData<>(); private MutableLiveData mLoadStatusLiveData = new MutableLiveData<>(); - public AskQuestionsHotViewModel(@NonNull Application application) { + public AskQuestionsRecommendsViewModel(@NonNull Application application) { super(application); - loadData(false, null); + loadAskSubjectColumn(); + } + + void loadAskSubjectColumn() { + RetrofitManager.getInstance(getApplication()).getApi() + .getAskSubjectColumn(UserManager.getInstance().getCommunityId(getApplication())) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response>() { + @Override + public void onResponse(List response) { + super.onResponse(response); + mSubjectLiveData.postValue(response); + loadData(false, null); + } + + @Override + public void onFailure(HttpException e) { + super.onFailure(e); + loadData(false, null); + } + }); } void loadData(boolean isUp, String sequenceId) { Observable> askHot; String communityId = UserManager.getInstance().getCommunityId(getApplication()); if (TextUtils.isEmpty(sequenceId)) { - askHot = RetrofitManager.getInstance(getApplication()).getApi().getAskHot(communityId, ""); + askHot = RetrofitManager.getInstance(getApplication()).getApi().getAskRecommends(communityId, ""); } else if (isUp) { - askHot = RetrofitManager.getInstance(getApplication()).getApi().getAskHot(communityId, + askHot = RetrofitManager.getInstance(getApplication()).getApi().getAskRecommends(communityId, UrlFilterUtils.getFilterQuery("action", "up", "sequence_id", sequenceId)); } else { - askHot = RetrofitManager.getInstance(getApplication()).getApi().getAskHot(communityId, + askHot = RetrofitManager.getInstance(getApplication()).getApi().getAskRecommends(communityId, UrlFilterUtils.getFilterQuery("action", "down", "sequence_id", sequenceId)); } @@ -89,13 +120,7 @@ public class AskQuestionsHotViewModel extends ListViewModel getRefreshCount() { + return mRefreshCount; + } + @Override public Observable> provideDataObservable(int page) { return null; } + + public MutableLiveData> getSubjectLiveData() { + return mSubjectLiveData; + } } diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskSubjectPageAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/AskSubjectPageAdapter.java new file mode 100644 index 0000000000..0c1de40a1f --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/AskSubjectPageAdapter.java @@ -0,0 +1,56 @@ +package com.gh.gamecenter.ask; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.gh.gamecenter.NormalActivity; +import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.RecyclingPagerAdapter; +import com.gh.gamecenter.ask.entity.AskSubjectEntity; +import com.gh.gamecenter.ask.subject.AskSubjectFragment; +import com.gh.gamecenter.databinding.AskRecommendsSubjectItemBinding; + +import java.util.List; + +/** + * Created by khy on 1/04/18. + */ + +public class AskSubjectPageAdapter extends RecyclingPagerAdapter { + + private Context mContext; + + private List mEntityList; + + public AskSubjectPageAdapter(Context context, List entityList) { + mContext = context; + mEntityList = entityList; + } + + @Override + public View getView(int position, View convertView, ViewGroup container) { + AskRecommendsSubjectItemBinding binding; + if (convertView != null) { + binding = DataBindingUtil.bind(convertView); + } else { + binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.ask_recommends_subject_item, null, false); + } + AskSubjectEntity entity = mEntityList.get(position % mEntityList.size()); + binding.setEntity(entity); + binding.getRoot().setOnClickListener(v -> { + Bundle bundle = new Bundle(); + bundle.putParcelable(AskSubjectEntity.TAG, entity); + NormalActivity.startFragment(mContext, AskSubjectFragment.class, bundle); + }); + return binding.getRoot(); + } + + @Override + public int getCount() { + return Integer.MAX_VALUE; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskSubjectViewHolder.java b/app/src/main/java/com/gh/gamecenter/ask/AskSubjectViewHolder.java new file mode 100644 index 0000000000..fd62d67c7b --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/AskSubjectViewHolder.java @@ -0,0 +1,27 @@ +package com.gh.gamecenter.ask; + +import android.support.v4.view.ViewPager; +import android.view.View; +import android.widget.ProgressBar; + +import com.gh.base.BaseRecyclerViewHolder; +import com.gh.gamecenter.R; +import com.gh.gamecenter.ask.entity.AskSubjectEntity; + +import butterknife.BindView; + +/** + * Created by khy on 1/04/18. + */ + +public class AskSubjectViewHolder extends BaseRecyclerViewHolder { + + @BindView(R.id.ask_recommends_subject_vp) + ViewPager mSubjectViewPager; + @BindView(R.id.ask_recommends_subject_pb) + ProgressBar mSubjectProgress; + + public AskSubjectViewHolder(View view) { + super(view); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/ask/SelectGameFragment.java b/app/src/main/java/com/gh/gamecenter/ask/SelectGameFragment.java index d0b74908d8..8921eb992a 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/SelectGameFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/SelectGameFragment.java @@ -28,7 +28,6 @@ import com.gh.gamecenter.baselist.LoadType; import com.gh.gamecenter.db.info.InstallInfo; import com.gh.gamecenter.entity.InstallGameEntity; import com.gh.gamecenter.manager.UserManager; -import com.gh.gamecenter.retrofit.JSONObjectResponse; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; import com.halo.assistant.HaloApp; @@ -205,23 +204,10 @@ public class SelectGameFragment extends ListFragment() { @Override - public void onResponse(JSONObject response) { - if (response == null) { - toast("提交失败,请检查网络状态"); - return; - } - try { - if ("ok".equals(response.getString("status"))) { - - toast("提交成功"); - } else { - toast("提交失败,请稍后尝试!"); - } - } catch (JSONException e) { - e.printStackTrace(); - } + public void onResponse(ResponseBody response) { + toast("提交成功"); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/ask/entity/AskSubjectEntity.java b/app/src/main/java/com/gh/gamecenter/ask/entity/AskSubjectEntity.java new file mode 100644 index 0000000000..07a1208bde --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/entity/AskSubjectEntity.java @@ -0,0 +1,105 @@ +package com.gh.gamecenter.ask.entity; + +import android.os.Parcel; +import android.os.Parcelable; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +/** + * Created by khy on 1/04/18. + */ + +public class AskSubjectEntity implements Parcelable { + + public final static String TAG = "AskSubjectEntity"; + + @SerializedName("_id") + private String id; + + private String icon; + + private String title; + + private String description; + + private List tags; + + public AskSubjectEntity() { + } + + protected AskSubjectEntity(Parcel in) { + id = in.readString(); + icon = in.readString(); + title = in.readString(); + description = in.readString(); + tags = in.createStringArrayList(); + } + + public static final Creator CREATOR = new Creator() { + @Override + public AskSubjectEntity createFromParcel(Parcel in) { + return new AskSubjectEntity(in); + } + + @Override + public AskSubjectEntity[] newArray(int size) { + return new AskSubjectEntity[size]; + } + }; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public List getTags() { + return tags; + } + + public void setTags(List tags) { + this.tags = tags; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(id); + dest.writeString(icon); + dest.writeString(title); + dest.writeString(description); + dest.writeStringList(tags); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerAdapter.java index f44608e7a8..d899edda50 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerAdapter.java @@ -41,7 +41,7 @@ class MyAnswerAdapter extends ListAdapter { return new FooterViewHolder(view, null, mListClickListener); case ItemViewType.ITEM_BODY: view = mLayoutInflater.inflate(R.layout.ask_answer_item, parent, false); - return new AnswerViewHolder(view, mEntityList, mListClickListener); + return new AnswerViewHolder(view, mListClickListener); default: return null; } diff --git a/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerFragment.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerFragment.java index 996052c594..7896120018 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerFragment.java @@ -50,7 +50,7 @@ public class MyAnswerFragment extends ListFragment entityList; + AnswerEntity entity; String tracers = mEntrance + "+(我的回答)"; Bundle bundle; switch (view.getId()) { @@ -60,8 +60,8 @@ public class MyAnswerFragment extends ListFragment) data; - Questions questions = entityList.get(position).getQuestions(); + entity = (AnswerEntity) data; + Questions questions = entity.getQuestions(); bundle = new Bundle(); bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, questions.getId()); bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); @@ -69,9 +69,9 @@ public class MyAnswerFragment extends ListFragment) data; + entity = (AnswerEntity) data; bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_ANSWER_ID, entityList.get(position).getId()); + bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getId()); bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle); break; diff --git a/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftAdapter.java index 4777f3441b..0b389fe367 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftAdapter.java @@ -41,7 +41,7 @@ class MyDraftAdapter extends ListAdapter { return new FooterViewHolder(view, null, mListClickListener); case ItemViewType.ITEM_BODY: view = mLayoutInflater.inflate(R.layout.ask_answer_item, parent, false); - return new AnswerViewHolder(view, mEntityList, mListClickListener); + return new AnswerViewHolder(view, mListClickListener); default: return null; } diff --git a/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftFragment.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftFragment.java index 98de0d509e..fbfcc4a18c 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftFragment.java @@ -80,7 +80,7 @@ public class MyDraftFragment extends ListFragment) data).get(position); + entity = (AnswerEntity) data; bundle = new Bundle(); bundle.putString(EntranceUtils.KEY_QUESTIONS_TITLE, entity.getQuestions().getTitle()); bundle.putString(EntranceUtils.KEY_ANSWER_CONTENT, entity.getBrief()); @@ -89,7 +89,7 @@ public class MyDraftFragment extends ListFragment) data).get(position); + entity = (AnswerEntity) data; Questions questions = entity.getQuestions(); bundle = new Bundle(); bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, questions.getId()); diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldAdapter.java index 3662d179ce..f0f9eb9395 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldAdapter.java @@ -41,7 +41,7 @@ public class AnswerFoldAdapter extends ListAdapter { return new FooterViewHolder(view, null, mListClickListener); case ItemViewType.ITEM_BODY: view = mLayoutInflater.inflate(R.layout.ask_answer_item, parent, false); - return new AnswerViewHolder(view, mEntityList, mListClickListener); + return new AnswerViewHolder(view, mListClickListener); default: return null; } diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldFragment.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldFragment.java index 92d83ab772..91b4d6a86b 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerFoldFragment.java @@ -91,8 +91,7 @@ public class AnswerFoldFragment extends ListFragment entityList = (List) data; - AnswerEntity entity = entityList.get(position); + AnswerEntity entity = (AnswerEntity) data; Bundle bundle = new Bundle(); bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getId()); bundle.putString(EntranceUtils.KEY_ENTRANCE, mEntrance + "+(折叠回答)"); diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerViewHolder.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerViewHolder.java index 71a5101cb0..447347b561 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerViewHolder.java @@ -22,7 +22,7 @@ import butterknife.BindView; * Created by khy on 19/12/17. */ -public class AnswerViewHolder extends BaseRecyclerViewHolder { +public class AnswerViewHolder extends BaseRecyclerViewHolder { @BindView(R.id.ask_answer_item_usericon) SimpleDraweeView mUsericon; @@ -39,13 +39,14 @@ public class AnswerViewHolder extends BaseRecyclerViewHolder { @BindView(R.id.ask_answer_item_community_name) TextView mCommunityName; - public AnswerViewHolder(View itemView, Object data, OnListClickListener listClickListener) { - super(itemView, data, listClickListener); + public AnswerViewHolder(View itemView, OnListClickListener listClickListener) { + super(itemView, listClickListener); itemView.setOnClickListener(this); mQuestionTitle.setOnClickListener(this); } public void initAnswerViewHolder(Context context, AnswerEntity entity) { + setClickData(entity); mContent.setText(entity.getBrief()); mVotecount.setText(context.getString(R.string.ask_vote_count, AskUtils.voteCountFormat(entity.getVote()))); UserEntity user = entity.getUser(); @@ -61,6 +62,7 @@ public class AnswerViewHolder extends BaseRecyclerViewHolder { } public void initCollectionAnswerViewHolder(AnswerEntity entity) { + setClickData(entity); mQuestionTitle.setVisibility(View.VISIBLE); mQuestionTitle.setText(entity.getQuestions().getTitle()); mContent.setText(entity.getBrief()); @@ -80,6 +82,7 @@ public class AnswerViewHolder extends BaseRecyclerViewHolder { } public void initMyAnswerViewHolder(AnswerEntity entity) { + setClickData(entity); mUsername.setVisibility(View.GONE); mUsericon.setVisibility(View.GONE); mQuestionTitle.setVisibility(View.VISIBLE); @@ -98,6 +101,7 @@ public class AnswerViewHolder extends BaseRecyclerViewHolder { } public void initMyDraftViewHolder(AnswerEntity entity) { + setClickData(entity); mUsername.setVisibility(View.GONE); mUsericon.setVisibility(View.GONE); mQuestionTitle.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java index 05917798be..74c11847ea 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java @@ -123,7 +123,7 @@ public class QuestionsDetailAdapter extends ListAdapter { return new FooterViewHolder(view, null, mListClickListener); case ItemViewType.ITEM_BODY: view = mLayoutInflater.inflate(R.layout.ask_answer_item, parent, false); - return new AnswerViewHolder(view, mEntityList, mListClickListener); + return new AnswerViewHolder(view, mListClickListener); default: return null; } diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailFragment.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailFragment.java index 448d06100a..24770d53fa 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailFragment.java @@ -195,8 +195,8 @@ public class QuestionsDetailFragment extends ListFragment entityList = (List) data; - AnswerEntity entity = entityList.get(position - ListAdapter.TOP_ITEM_COUNT); + + AnswerEntity entity = (AnswerEntity) data; Bundle bundle = new Bundle(); bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getId()); bundle.putString(EntranceUtils.KEY_ENTRANCE, mEntrance + "+(问题详情)"); diff --git a/app/src/main/java/com/gh/gamecenter/ask/subject/AskSubjectAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/subject/AskSubjectAdapter.java new file mode 100644 index 0000000000..b1d99b4927 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/subject/AskSubjectAdapter.java @@ -0,0 +1,103 @@ +package com.gh.gamecenter.ask.subject; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; + +import com.gh.base.OnListClickListener; +import com.gh.common.constant.ItemViewType; +import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.ask.entity.AnswerEntity; +import com.gh.gamecenter.ask.entity.AskSubjectEntity; +import com.gh.gamecenter.ask.questionsdetail.AnswerViewHolder; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.databinding.AskSubjectTopItemBinding; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by khy on 1/04/18. + */ + +public class AskSubjectAdapter extends ListAdapter { + + private OnListClickListener mListClickListener; + + private AskSubjectEntity mSubjectEntity; + + public AskSubjectAdapter(Context context, OnListClickListener listClickListener) { + super(context); + mListClickListener = listClickListener; + } + + @Override + protected void setListData(List updateData) { + int oldSize = mEntityList == null ? 0 : mEntityList.size() + TOP_ITEM_COUNT; + mEntityList = new ArrayList<>(updateData); + if (oldSize == 0 || oldSize > updateData.size()) { + notifyDataSetChanged(); + } else { + notifyItemRangeInserted(oldSize, updateData.size() - oldSize); + } + } + + public void setSubjectEntity(AskSubjectEntity subjectEntity) { + mSubjectEntity = subjectEntity; + notifyDataSetChanged(); + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view; + switch (viewType) { + case ItemViewType.ITEM_TOP: + view = mLayoutInflater.inflate(R.layout.ask_subject_top_item, parent, false); + AskSubjectTopItemBinding binding = DataBindingUtil.bind(view); + return new AskSubjectViewHolder(binding, mListClickListener); + case ItemViewType.ITEM_FOOTER: + view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); + return new FooterViewHolder(view, mListClickListener); + case ItemViewType.ITEM_BODY: + view = mLayoutInflater.inflate(R.layout.ask_answer_item, parent, false); + return new AnswerViewHolder(view, mListClickListener); + } + return null; + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + switch (getItemViewType(position)) { + case ItemViewType.ITEM_TOP: + AskSubjectViewHolder subjectViewHolder = (AskSubjectViewHolder) holder; + subjectViewHolder.mBinding.setEntity(mSubjectEntity); + break; + case ItemViewType.ITEM_FOOTER: + FooterViewHolder footerViewHolder = (FooterViewHolder) holder; + footerViewHolder.initItemPadding(); + footerViewHolder.initFooterViewHolder(mIsNetworkError, mIsOver, R.string.ask_loadover_hint); + break; + case ItemViewType.ITEM_BODY: + int index = position - ListAdapter.TOP_ITEM_COUNT; + if (index != -1) + ((AnswerViewHolder) holder).initAnswerViewHolder(mContext, mEntityList.get(index)); + break; + } + } + + @Override + public int getItemViewType(int position) { + if (position == 0) return ItemViewType.ITEM_TOP; + if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER; + return ItemViewType.ITEM_BODY; + } + + @Override + public int getItemCount() { + if (mSubjectEntity == null) return 0; + return mEntityList == null ? TOP_ITEM_COUNT + FOOTER_ITEM_COUNT : mEntityList.size() + FOOTER_ITEM_COUNT + TOP_ITEM_COUNT; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/ask/subject/AskSubjectFragment.java b/app/src/main/java/com/gh/gamecenter/ask/subject/AskSubjectFragment.java new file mode 100644 index 0000000000..b5c73e4f9c --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/subject/AskSubjectFragment.java @@ -0,0 +1,96 @@ +package com.gh.gamecenter.ask.subject; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import com.gh.common.util.EntranceUtils; +import com.gh.common.view.VerticalItemDecoration; +import com.gh.gamecenter.NormalActivity; +import com.gh.gamecenter.R; +import com.gh.gamecenter.ask.AnswerDetailFragment; +import com.gh.gamecenter.ask.entity.AnswerEntity; +import com.gh.gamecenter.ask.entity.AskSubjectEntity; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.baselist.LoadStatus; +import com.gh.gamecenter.baselist.LoadType; + +/** + * Created by khy on 1/04/18. + */ + +public class AskSubjectFragment extends ListFragment { + + private AskSubjectAdapter mAdapter; + + @Override + protected RecyclerView.ItemDecoration getItemDecoration() { + return new VerticalItemDecoration(getContext(), 8, false); + } + + @Override + protected boolean isAutomaticLoad() { + return false; + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setNavigationTitle("专题详情"); + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Bundle arguments = getArguments(); + if (arguments != null) { + AskSubjectEntity entity = arguments.getParcelable(AskSubjectEntity.TAG); + mListViewModel.setSubjectLiveData(entity); + } + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + mListViewModel.getSubjectLiveData().observe(this, subjectEntity -> mAdapter.setSubjectEntity(subjectEntity)); + } + + @Override + protected ListAdapter provideListAdapter() { + return mAdapter == null ? mAdapter = new AskSubjectAdapter(getContext(), this) : mAdapter; + } + + @Override + public void onLoadEmpty() { + super.onLoadDone(); + mAdapter.loadChange(LoadStatus.LIST_OVER); + } + + @Override + public void onLoadError() { + super.onLoadDone(); + mAdapter.loadChange(LoadStatus.LIST_FAILED); + } + + @Override + public void onListClick(View view, int position, Object data) { + switch (view.getId()) { + case R.id.footerview_item: + if (mAdapter.isNetworkError()) { + mListViewModel.load(LoadType.RETRY); + } + break; + case R.id.ask_answer_item_constraintlayout: + AnswerEntity answerEntity = (AnswerEntity) data; + Bundle bundle = new Bundle(); + bundle.putString(EntranceUtils.KEY_ANSWER_ID, answerEntity.getId()); + bundle.putString(EntranceUtils.KEY_ENTRANCE, "(社区专题)"); + NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle); + break; + } + + } +} diff --git a/app/src/main/java/com/gh/gamecenter/ask/subject/AskSubjectViewHolder.java b/app/src/main/java/com/gh/gamecenter/ask/subject/AskSubjectViewHolder.java new file mode 100644 index 0000000000..41167e8e26 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/subject/AskSubjectViewHolder.java @@ -0,0 +1,20 @@ +package com.gh.gamecenter.ask.subject; + +import com.gh.base.BaseRecyclerViewHolder; +import com.gh.base.OnListClickListener; +import com.gh.gamecenter.ask.entity.AskSubjectEntity; +import com.gh.gamecenter.databinding.AskSubjectTopItemBinding; + +/** + * Created by khy on 1/04/18. + */ + +public class AskSubjectViewHolder extends BaseRecyclerViewHolder { + + AskSubjectTopItemBinding mBinding; + + public AskSubjectViewHolder(AskSubjectTopItemBinding binding, OnListClickListener listClickListener) { + super(binding.getRoot(), listClickListener); + mBinding = binding; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/ask/subject/AskSubjectViewModel.java b/app/src/main/java/com/gh/gamecenter/ask/subject/AskSubjectViewModel.java new file mode 100644 index 0000000000..7d54a66a6b --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/subject/AskSubjectViewModel.java @@ -0,0 +1,49 @@ +package com.gh.gamecenter.ask.subject; + +import android.app.Application; +import android.arch.lifecycle.MediatorLiveData; +import android.arch.lifecycle.MutableLiveData; +import android.support.annotation.NonNull; + +import com.gh.gamecenter.ask.entity.AnswerEntity; +import com.gh.gamecenter.ask.entity.AskSubjectEntity; +import com.gh.gamecenter.baselist.ListViewModel; +import com.gh.gamecenter.baselist.LoadType; +import com.gh.gamecenter.manager.UserManager; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import java.util.List; + +import rx.Observable; + +/** + * Created by khy on 1/04/18. + */ + +public class AskSubjectViewModel extends ListViewModel { + MutableLiveData mSubjectLiveData = new MediatorLiveData<>(); + + public AskSubjectViewModel(@NonNull Application application) { + super(application); + mResultLiveData.addSource(mListLiveData, mResultLiveData::postValue); + mResultLiveData.addSource(mSubjectLiveData, askSubjectEntity -> { + mResultLiveData.removeSource(mSubjectLiveData); + load(LoadType.NORMAL); + }); + } + + public MutableLiveData getSubjectLiveData() { + return mSubjectLiveData; + } + + public void setSubjectLiveData(AskSubjectEntity subjectLiveData) { + if (subjectLiveData != null) mSubjectLiveData.postValue(subjectLiveData); + } + + @Override + public Observable> provideDataObservable(int page) { + if (mSubjectLiveData.getValue() == null) return null; + return RetrofitManager.getInstance(getApplication()).getApi() + .getAskSubjectColumnAnswers(UserManager.getInstance().getCommunityId(getApplication()), mSubjectLiveData.getValue().getId()); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/baselist/LoadStatus.java b/app/src/main/java/com/gh/gamecenter/baselist/LoadStatus.java index bcc042b530..8a844f47af 100644 --- a/app/src/main/java/com/gh/gamecenter/baselist/LoadStatus.java +++ b/app/src/main/java/com/gh/gamecenter/baselist/LoadStatus.java @@ -22,9 +22,4 @@ public enum LoadStatus { LIST_LOADED, LIST_FAILED, LIST_OVER, - - // 推荐数据流相关 - REFRESH_FAILED, - REFRESH_OVER, - REFRESH_LOADED } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/collection/AnswerAdapter.java b/app/src/main/java/com/gh/gamecenter/collection/AnswerAdapter.java index 92663637c0..de075c630e 100644 --- a/app/src/main/java/com/gh/gamecenter/collection/AnswerAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/collection/AnswerAdapter.java @@ -41,7 +41,7 @@ public class AnswerAdapter extends ListAdapter { return new FooterViewHolder(view, null, mListClickListener); case ItemViewType.ITEM_BODY: view = mLayoutInflater.inflate(R.layout.ask_answer_item, parent, false); - return new AnswerViewHolder(view, mEntityList, mListClickListener); + return new AnswerViewHolder(view, mListClickListener); default: return null; } diff --git a/app/src/main/java/com/gh/gamecenter/collection/AnswerFragment.java b/app/src/main/java/com/gh/gamecenter/collection/AnswerFragment.java index 52a81da110..53a97924ee 100644 --- a/app/src/main/java/com/gh/gamecenter/collection/AnswerFragment.java +++ b/app/src/main/java/com/gh/gamecenter/collection/AnswerFragment.java @@ -42,7 +42,7 @@ public class AnswerFragment extends ListFragment entityList; + AnswerEntity entity; String tracers; switch (view.getId()) { case R.id.footerview_item: @@ -51,8 +51,7 @@ public class AnswerFragment extends ListFragment) data; - AnswerEntity entity = entityList.get(position); + entity = (AnswerEntity) data; Bundle bundle = new Bundle(); bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getId()); bundle.putString(EntranceUtils.KEY_ENTRANCE, mEntrance + "+(回答)"); @@ -60,8 +59,8 @@ public class AnswerFragment extends ListFragment) data; - Questions questions = entityList.get(position).getQuestions(); + entity = (AnswerEntity) data; + Questions questions = entity.getQuestions(); bundle = new Bundle(); bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, questions.getId()); @@ -71,9 +70,9 @@ public class AnswerFragment extends ListFragment) data; + entity = (AnswerEntity) data; bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_ANSWER_ID, entityList.get(position).getId()); + bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getId()); bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers); NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle); break; diff --git a/app/src/main/java/com/gh/gamecenter/fragment/LoginFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/LoginFragment.java index 8e7c4261c8..9e2f44ec13 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/LoginFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/LoginFragment.java @@ -6,7 +6,6 @@ import android.arch.lifecycle.ViewModelProviders; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.os.Handler; import android.os.Message; import android.support.annotation.Nullable; import android.support.v4.content.ContextCompat; @@ -63,28 +62,25 @@ public class LoginFragment extends NormalFragment implements LoginUtils.onCaptch private String mServiceId; - Handler mHandler = new Handler() { - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - if (msg.what == 0) { // 验证码倒计时 - int arg1 = msg.arg1; - arg1--; - if (arg1 >= 0) { - Message message = new Message(); - message.what = 0; - message.arg1 = arg1; - mHandler.sendMessageDelayed(message, 1000); - mLoginCaptcha.setText(arg1 + "s"); - } else { - mLoginCaptcha.setText("重新获取"); - mLoginCaptcha.setTextColor(ContextCompat.getColor(getContext(), R.color.title)); - mLoginCaptcha.setBackgroundResource(R.drawable.border_black_bg); - mLoginCaptcha.setEnabled(true); - } + @Override + protected void handleMessage(Message msg) { + if (msg.what == 0) { // 验证码倒计时 + int arg1 = msg.arg1; + arg1--; + if (arg1 >= 0) { + Message message = new Message(); + message.what = 0; + message.arg1 = arg1; + mBaseHandler.sendMessageDelayed(message, 1000); + mLoginCaptcha.setText(arg1 + "s"); + } else { + mLoginCaptcha.setText("重新获取"); + mLoginCaptcha.setTextColor(ContextCompat.getColor(getContext(), R.color.title)); + mLoginCaptcha.setBackgroundResource(R.drawable.border_black_bg); + mLoginCaptcha.setEnabled(true); } } - }; + } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { @@ -186,7 +182,7 @@ public class LoginFragment extends NormalFragment implements LoginUtils.onCaptch Message message = new Message(); message.what = 0; message.arg1 = 60; // 倒数时间 - mHandler.sendMessage(message); + mBaseHandler.sendMessage(message); mLoginCaptcha.setTextColor(ContextCompat.getColor(getContext(), R.color.hint)); mLoginCaptcha.setBackgroundResource(R.drawable.border_captcha_bg); mLoginCaptcha.setEnabled(false); @@ -213,7 +209,7 @@ public class LoginFragment extends NormalFragment implements LoginUtils.onCaptch @Override public void onDestroyView() { super.onDestroyView(); - mHandler.removeCallbacksAndMessages(null); + mBaseHandler.removeCallbacksAndMessages(null); } diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageNormalFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageNormalFragment.java index 7cc5de9eb9..e27f84ba8e 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageNormalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageNormalFragment.java @@ -9,6 +9,7 @@ import android.view.View; import com.gh.common.util.AskLogUtils; import com.gh.common.util.EntranceUtils; import com.gh.gamecenter.CommentDetailActivity; +import com.gh.gamecenter.MessageDetailActivity; import com.gh.gamecenter.NewsDetailActivity; import com.gh.gamecenter.NormalActivity; import com.gh.gamecenter.R; @@ -96,19 +97,20 @@ public class MessageNormalFragment extends ListFragment> getAskHot(@Path("community_id") String communityId, @Query("filter") String filter); + Observable> getAskRecommends(@Path("community_id") String communityId, @Query("filter") String filter); /** * 获取社区首页-问题列表 @@ -893,6 +894,18 @@ public interface ApiService { @GET("users/{user_id}/favorites/answers") Observable> getCollectionAnswer(@Path("user_id") String user_id, @Query("page") int page); + /** + * 专题数据 + */ + @GET("communities/{community_id}/columns") + Observable> getAskSubjectColumn(@Path("community_id") String communityId); + + /** + * 社区专题的答案 + */ + @GET("communities/{community_id}/columns/{column_id}/answers") + Observable> getAskSubjectColumnAnswers(@Path("community_id") String communityId, @Path("column_id") String columnId); + // /** // * 获取默认社区 // */ diff --git a/app/src/main/res/drawable-xhdpi/message_image_placeholder.png b/app/src/main/res/drawable-xhdpi/message_image_placeholder.png new file mode 100644 index 0000000000..d2bf807933 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/message_image_placeholder.png differ diff --git a/app/src/main/res/drawable/ask_subject_pb.xml b/app/src/main/res/drawable/ask_subject_pb.xml new file mode 100644 index 0000000000..10e14f2917 --- /dev/null +++ b/app/src/main/res/drawable/ask_subject_pb.xml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/ask_recommends_subject.xml b/app/src/main/res/layout/ask_recommends_subject.xml new file mode 100644 index 0000000000..0374d9f594 --- /dev/null +++ b/app/src/main/res/layout/ask_recommends_subject.xml @@ -0,0 +1,22 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/ask_recommends_subject_item.xml b/app/src/main/res/layout/ask_recommends_subject_item.xml new file mode 100644 index 0000000000..20c78511d0 --- /dev/null +++ b/app/src/main/res/layout/ask_recommends_subject_item.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/ask_subject_top_item.xml b/app/src/main/res/layout/ask_subject_top_item.xml new file mode 100644 index 0000000000..8d17cf3105 --- /dev/null +++ b/app/src/main/res/layout/ask_subject_top_item.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/message_item.xml b/app/src/main/res/layout/message_item.xml index 4c7603ebfb..488d3ab5a8 100644 --- a/app/src/main/res/layout/message_item.xml +++ b/app/src/main/res/layout/message_item.xml @@ -10,7 +10,7 @@ + android:layout_centerVertical = "true" + app:fadeDuration = "500" + app:placeholderImage = "@drawable/message_image_placeholder" + app:placeholderImageScaleType = "fitXY" />