问答精选新增专题功能(完成)

This commit is contained in:
kehaoyuan
2018-04-02 14:51:04 +08:00
parent d5255f91d0
commit 5f09fd1fa3
39 changed files with 1027 additions and 242 deletions

View File

@ -51,16 +51,16 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
protected final Handler mBaseHandler = new BaseFragment.BaseHandler(this);
protected static class BaseHandler extends Handler {
private final WeakReference<BaseFragment> mfragmentWeakReference;
private final WeakReference<BaseFragment> 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);
}
}

View File

@ -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<ResponseBody>() {
@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();

View File

@ -114,7 +114,7 @@ public class AskFragment extends BaseFragment {
private void initViewPager() {
ArrayList<Fragment> fragmentList = new ArrayList<>();
fragmentList.add(new AskQuestionsHotFragment());
fragmentList.add(new AskQuestionsRecommendsFragment());
fragmentList.add(new AskQuestionsNewFragment());
mAskViewpager.setAdapter(new FragmentAdapter(getChildFragmentManager(), fragmentList));
mAskViewpager.setScrollable(false);

View File

@ -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<AnswerEntity> {
private OnListClickListener mListClickListener;
public AskQuestionsHotAdapter(Context context, OnListClickListener listClickListener) {
super(context);
mListClickListener = listClickListener;
}
@Override
protected void setListData(List<AnswerEntity> 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;
}
}

View File

@ -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<AnswerEntity> {
public static final int MAX_PROGRESS = 300;
private OnListClickListener mListClickListener;
private OnSubjectProgressListener mProgressListener;
private List<AskSubjectEntity> 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<AskSubjectEntity> subjectEntity) {
mSubjectEntity = subjectEntity;
notifyDataSetChanged();
}
@Override
protected void setListData(List<AnswerEntity> 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();
}
}

View File

@ -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<AnswerEntity, AskQuestionsHotViewModel> {
public class AskQuestionsRecommendsFragment extends ListFragment<AnswerEntity, AskQuestionsRecommendsViewModel>
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<AnswerEntity, AskQuest
NormalActivity.startFragment(getContext(), QuestionsEditFragment.class);
};
mListViewModel.getLoadStatusLiveData().observe(this, status -> {
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<AnswerEntity, AskQuest
}
}
protected AskQuestionsHotAdapter provideListAdapter() {
return mAdapter == null ? mAdapter = new AskQuestionsHotAdapter(getContext(), this) : mAdapter;
protected AskQuestionsRecommendsAdapter provideListAdapter() {
return mAdapter == null ? mAdapter = new AskQuestionsRecommendsAdapter(getContext(), this, this) : mAdapter;
}
@OnClick(R.id.reuse_nodata_skip_tv_btn)
@ -127,4 +175,25 @@ public class AskQuestionsHotFragment extends ListFragment<AnswerEntity, AskQuest
mListViewModel.load(LoadType.REFRESH);
}, 500);
}
@Override
public void onStartProgress() {
mBaseHandler.removeMessages(0);
Message message = new Message();
message.what = 0;
message.arg1 = 0;
mBaseHandler.sendMessage(message);
}
@Override
public void onResume() {
super.onResume();
onStartProgress();
}
@Override
public void onPause() {
super.onPause();
mBaseHandler.removeMessages(0);
}
}

View File

@ -20,7 +20,7 @@ import butterknife.BindView;
* Created by khy on 4/12/17.
*/
public class AskQuestionsHotViewHolder extends BaseRecyclerViewHolder<AnswerEntity> {
public class AskQuestionsRecommendsViewHolder extends BaseRecyclerViewHolder<AnswerEntity> {
@BindView(R.id.ask_item_usericon)
@ -36,7 +36,7 @@ public class AskQuestionsHotViewHolder extends BaseRecyclerViewHolder<AnswerEnti
@BindView(R.id.ask_item_votecount)
TextView mAskVotecount;
public AskQuestionsHotViewHolder(View itemView,OnListClickListener listClickListener) {
public AskQuestionsRecommendsViewHolder(View itemView, OnListClickListener listClickListener) {
super(itemView, listClickListener);
itemView.setOnClickListener(this);
mAskTitle.setOnClickListener(this);

View File

@ -2,12 +2,14 @@ package com.gh.gamecenter.ask;
import android.app.Application;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MediatorLiveData;
import android.arch.lifecycle.MutableLiveData;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import com.gh.common.util.UrlFilterUtils;
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.LoadStatus;
import com.gh.gamecenter.baselist.LoadType;
@ -27,26 +29,55 @@ import rx.schedulers.Schedulers;
* Created by khy on 20/03/18.
*/
public class AskQuestionsHotViewModel extends ListViewModel<AnswerEntity, AnswerEntity> {
public class AskQuestionsRecommendsViewModel extends ListViewModel<AnswerEntity, AnswerEntity> {
/**
* 等于 0 刷新结束没有内容了
* 小于 0 刷新失败
* 大于 0 刷新成功数量
*/
private MutableLiveData<Integer> mRefreshCount = new MutableLiveData<>();
private MutableLiveData<List<AnswerEntity>> mLiveData = new MutableLiveData<>();
private MutableLiveData<List<AskSubjectEntity>> mSubjectLiveData = new MediatorLiveData<>();
private MutableLiveData<LoadStatus> 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<List<AskSubjectEntity>>() {
@Override
public void onResponse(List<AskSubjectEntity> 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<List<AnswerEntity>> 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<AnswerEntity, Answer
mLoadStatusLiveData.postValue(LoadStatus.INIT_LOADED);
}
} else if (isUp) {
if (size == 0) {
mLoadStatusLiveData.postValue(LoadStatus.REFRESH_OVER);
} else if (size == -1) {
mLoadStatusLiveData.postValue(LoadStatus.REFRESH_FAILED);
} else {
mLoadStatusLiveData.postValue(LoadStatus.REFRESH_LOADED);
}
mRefreshCount.postValue(size);
} else {
if (size == -1) {
mLoadStatusLiveData.postValue(LoadStatus.LIST_FAILED);
@ -132,8 +157,16 @@ public class AskQuestionsHotViewModel extends ListViewModel<AnswerEntity, Answer
return mLoadStatusLiveData;
}
public LiveData<Integer> getRefreshCount() {
return mRefreshCount;
}
@Override
public <T> Observable<List<T>> provideDataObservable(int page) {
return null;
}
public MutableLiveData<List<AskSubjectEntity>> getSubjectLiveData() {
return mSubjectLiveData;
}
}

View File

@ -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<AskSubjectEntity> mEntityList;
public AskSubjectPageAdapter(Context context, List<AskSubjectEntity> 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;
}
}

View File

@ -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<AskSubjectEntity> {
@BindView(R.id.ask_recommends_subject_vp)
ViewPager mSubjectViewPager;
@BindView(R.id.ask_recommends_subject_pb)
ProgressBar mSubjectProgress;
public AskSubjectViewHolder(View view) {
super(view);
}
}

View File

@ -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<AskGameSelectEntity, Select
RetrofitManager.getInstance(getContext()).getApi().postSuggestion(body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new JSONObjectResponse() {
.subscribe(new Response<ResponseBody>() {
@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

View File

@ -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<String> 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<AskSubjectEntity> CREATOR = new Creator<AskSubjectEntity>() {
@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<String> getTags() {
return tags;
}
public void setTags(List<String> 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);
}
}

View File

@ -41,7 +41,7 @@ class MyAnswerAdapter extends ListAdapter<AnswerEntity> {
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;
}

View File

@ -50,7 +50,7 @@ public class MyAnswerFragment extends ListFragment<AnswerEntity, NormalListViewM
@Override
public void onListClick(View view, int position, Object data) {
List<AnswerEntity> entityList;
AnswerEntity entity;
String tracers = mEntrance + "+(我的回答)";
Bundle bundle;
switch (view.getId()) {
@ -60,8 +60,8 @@ public class MyAnswerFragment extends ListFragment<AnswerEntity, NormalListViewM
}
break;
case R.id.ask_answer_item_title:
entityList = (List<AnswerEntity>) 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<AnswerEntity, NormalListViewM
AskLogUtils.uploadQuestions(getContext(), tracers, questions);
break;
case R.id.ask_answer_item_constraintlayout:
entityList = (List<AnswerEntity>) 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;

View File

@ -41,7 +41,7 @@ class MyDraftAdapter extends ListAdapter<AnswerEntity> {
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;
}

View File

@ -80,7 +80,7 @@ public class MyDraftFragment extends ListFragment<AnswerEntity, NormalListViewMo
break;
case R.id.ask_answer_item_constraintlayout:
mDraftPosition = position;
entity = ((List<AnswerEntity>) 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<AnswerEntity, NormalListViewMo
break;
case R.id.ask_answer_item_title:
String tracers = mEntrance + "+(我的草稿)";
entity = ((List<AnswerEntity>) data).get(position);
entity = (AnswerEntity) data;
Questions questions = entity.getQuestions();
bundle = new Bundle();
bundle.putString(EntranceUtils.KEY_QUESTIONS_ID, questions.getId());

View File

@ -41,7 +41,7 @@ public class AnswerFoldAdapter extends ListAdapter<AnswerEntity> {
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;
}

View File

@ -91,8 +91,7 @@ public class AnswerFoldFragment extends ListFragment<AnswerEntity, NormalListVie
}
break;
case R.id.ask_answer_item_constraintlayout:
List<AnswerEntity> entityList = (List<AnswerEntity>) 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 + "+(折叠回答)");

View File

@ -22,7 +22,7 @@ import butterknife.BindView;
* Created by khy on 19/12/17.
*/
public class AnswerViewHolder extends BaseRecyclerViewHolder {
public class AnswerViewHolder extends BaseRecyclerViewHolder<AnswerEntity> {
@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);

View File

@ -123,7 +123,7 @@ public class QuestionsDetailAdapter extends ListAdapter<AnswerEntity> {
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;
}

View File

@ -195,8 +195,8 @@ public class QuestionsDetailFragment extends ListFragment<AnswerEntity, NormalLi
case R.id.ask_answer_item_img:
case R.id.ask_answer_item_content:
case R.id.ask_answer_item_title:
List<AnswerEntity> entityList = (List<AnswerEntity>) 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 + "+(问题详情)");

View File

@ -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<AnswerEntity> {
private OnListClickListener mListClickListener;
private AskSubjectEntity mSubjectEntity;
public AskSubjectAdapter(Context context, OnListClickListener listClickListener) {
super(context);
mListClickListener = listClickListener;
}
@Override
protected void setListData(List<AnswerEntity> 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;
}
}

View File

@ -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<AnswerEntity, AskSubjectViewModel> {
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;
}
}
}

View File

@ -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<AskSubjectEntity> {
AskSubjectTopItemBinding mBinding;
public AskSubjectViewHolder(AskSubjectTopItemBinding binding, OnListClickListener listClickListener) {
super(binding.getRoot(), listClickListener);
mBinding = binding;
}
}

View File

@ -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<AnswerEntity, AnswerEntity> {
MutableLiveData<AskSubjectEntity> 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<AskSubjectEntity> getSubjectLiveData() {
return mSubjectLiveData;
}
public void setSubjectLiveData(AskSubjectEntity subjectLiveData) {
if (subjectLiveData != null) mSubjectLiveData.postValue(subjectLiveData);
}
@Override
public Observable<List<AnswerEntity>> provideDataObservable(int page) {
if (mSubjectLiveData.getValue() == null) return null;
return RetrofitManager.getInstance(getApplication()).getApi()
.getAskSubjectColumnAnswers(UserManager.getInstance().getCommunityId(getApplication()), mSubjectLiveData.getValue().getId());
}
}

View File

@ -22,9 +22,4 @@ public enum LoadStatus {
LIST_LOADED,
LIST_FAILED,
LIST_OVER,
// 推荐数据流相关
REFRESH_FAILED,
REFRESH_OVER,
REFRESH_LOADED
}

View File

@ -41,7 +41,7 @@ public class AnswerAdapter extends ListAdapter<AnswerEntity> {
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;
}

View File

@ -42,7 +42,7 @@ public class AnswerFragment extends ListFragment<AnswerEntity, NormalListViewMod
@Override
public void onListClick(View view, int position, Object data) {
List<AnswerEntity> entityList;
AnswerEntity entity;
String tracers;
switch (view.getId()) {
case R.id.footerview_item:
@ -51,8 +51,7 @@ public class AnswerFragment extends ListFragment<AnswerEntity, NormalListViewMod
}
break;
case R.id.ask_answer_item_content:
entityList = (List<AnswerEntity>) 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<AnswerEntity, NormalListViewMod
break;
case R.id.ask_answer_item_title:
tracers = mEntrance + "+(回答)";
entityList = (List<AnswerEntity>) 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<AnswerEntity, NormalListViewMod
break;
case R.id.ask_answer_item_constraintlayout:
tracers = mEntrance + "+(回答)";
entityList = (List<AnswerEntity>) 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;

View File

@ -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);
}

View File

@ -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<MessageEntity, NormalLis
switch (entity.getType()) {
case "comment_vote":
if (view.getId() == R.id.message_original) {
Intent intent = NewsDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), "消息中心-消息");
Intent intent = NewsDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), tracers);
startActivity(intent);
} else if (view.getId() == R.id.message_item) {
Intent intent = CommentDetailActivity.getIntent(getContext(), entity.getDialogue().getTo().getId());
Intent intent = MessageDetailActivity.getIntentById(getContext(),
entity.getArticle().getId(), -1, false, tracers);
startActivity(intent);
}
break;
case "reply":
if (view.getId() == R.id.message_original) {
Intent intent = NewsDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), "消息中心-消息");
Intent intent = NewsDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), tracers);
startActivity(intent);
} else if (view.getId() == R.id.message_item) {
Intent intent = CommentDetailActivity.getIntent(getContext(), entity.getDialogue().getTo().getId());
Intent intent = CommentDetailActivity.getIntent(getContext(), entity.getDialogue().getFrom().getId());
startActivity(intent);
}
break;
@ -153,7 +155,19 @@ public class MessageNormalFragment extends ListFragment<MessageEntity, NormalLis
bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers);
NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle);
}
break;
case "reply_answer_comment":
if (view.getId() == R.id.message_original) {
bundle = new Bundle();
bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getAnswer().getId());
bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers);
NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle);
} else if (view.getId() == R.id.message_item) {
Intent intent = CommentDetailActivity.getAnswerCommentIntent(getContext(), entity.getDialogue().getFrom().getId(), entity.getAnswer().getId());
startActivity(intent);
}
break;
case "answer_comment_vote":
case "answer_comment":
if (view.getId() == R.id.message_original) {
bundle = new Bundle();
@ -168,18 +182,7 @@ public class MessageNormalFragment extends ListFragment<MessageEntity, NormalLis
NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle); // 打开评论管理
}
break;
case "answer_comment_vote":
if (view.getId() == R.id.message_original) {
bundle = new Bundle();
bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getAnswer().getId());
bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers);
NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle);
} else if (view.getId() == R.id.message_item) {
Intent intent = CommentDetailActivity.getAnswerCommentIntent(getContext(), entity.getDialogue().getFrom().getId(), entity.getComment().getId());
startActivity(intent);
}
break;
}
}
}

View File

@ -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;
@ -86,19 +87,20 @@ public class NewMessageFragment extends ListFragment<MessageEntity, NormalListVi
switch (entity.getType()) {
case "comment_vote":
if (view.getId() == R.id.message_original) {
Intent intent = NewsDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), "消息中心-消息");
Intent intent = NewsDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), tracers);
startActivity(intent);
} else if (view.getId() == R.id.message_item) {
Intent intent = CommentDetailActivity.getIntent(getContext(), entity.getDialogue().getTo().getId());
Intent intent = MessageDetailActivity.getIntentById(getContext(),
entity.getArticle().getId(), -1, false, tracers);
startActivity(intent);
}
break;
case "reply":
if (view.getId() == R.id.message_original) {
Intent intent = NewsDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), "消息中心-消息");
Intent intent = NewsDetailActivity.getIntentById(getContext(), entity.getArticle().getId(), tracers);
startActivity(intent);
} else if (view.getId() == R.id.message_item) {
Intent intent = CommentDetailActivity.getIntent(getContext(), entity.getDialogue().getTo().getId());
Intent intent = CommentDetailActivity.getIntent(getContext(), entity.getDialogue().getFrom().getId());
startActivity(intent);
}
break;
@ -143,7 +145,19 @@ public class NewMessageFragment extends ListFragment<MessageEntity, NormalListVi
bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers);
NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle);
}
break;
case "reply_answer_comment":
if (view.getId() == R.id.message_original) {
bundle = new Bundle();
bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getAnswer().getId());
bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers);
NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle);
} else if (view.getId() == R.id.message_item) {
Intent intent = CommentDetailActivity.getAnswerCommentIntent(getContext(), entity.getDialogue().getFrom().getId(), entity.getAnswer().getId());
startActivity(intent);
}
break;
case "answer_comment_vote":
case "answer_comment":
if (view.getId() == R.id.message_original) {
bundle = new Bundle();
@ -158,18 +172,6 @@ public class NewMessageFragment extends ListFragment<MessageEntity, NormalListVi
NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle); // 打开评论管理
}
break;
case "answer_comment_vote":
if (view.getId() == R.id.message_original) {
bundle = new Bundle();
bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getAnswer().getId());
bundle.putString(EntranceUtils.KEY_ENTRANCE, tracers);
NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle);
} else if (view.getId() == R.id.message_item) {
Intent intent = CommentDetailActivity.getAnswerCommentIntent(getContext(), entity.getDialogue().getFrom().getId(), entity.getComment().getId());
startActivity(intent);
}
break;
}
}

View File

@ -42,7 +42,7 @@ public class NewMessageItemViewHolder extends BaseRecyclerViewHolder<MessageEnti
case "reply":
mBinding.messageCommand.setText("回复了我");
mBinding.messageContent.setVisibility(View.VISIBLE);
mBinding.messageContent.setText(messageEntity.getComment().getContent());
mBinding.messageContent.setText(messageEntity.getDialogue().getTo().getContent());
mBinding.messageOriginalTitle.setText(messageEntity.getArticle().getTitle());
mBinding.messageOriginalIcon.setImageURI(messageEntity.getArticle().getThumb());
break;

View File

@ -4,6 +4,7 @@ import com.gh.gamecenter.ask.entity.AnswerDetailEntity;
import com.gh.gamecenter.ask.entity.AnswerEntity;
import com.gh.gamecenter.ask.entity.AskGameSelectEntity;
import com.gh.gamecenter.ask.entity.AskSearchEntity;
import com.gh.gamecenter.ask.entity.AskSubjectEntity;
import com.gh.gamecenter.ask.entity.AskTagGroupsEntity;
import com.gh.gamecenter.ask.entity.InviteEntity;
import com.gh.gamecenter.ask.entity.Questions;
@ -695,7 +696,7 @@ public interface ApiService {
* 获取社区首页精选
*/
@GET("communities/{community_id}/recommends")
Observable<List<AnswerEntity>> getAskHot(@Path("community_id") String communityId, @Query("filter") String filter);
Observable<List<AnswerEntity>> getAskRecommends(@Path("community_id") String communityId, @Query("filter") String filter);
/**
* 获取社区首页-问题列表
@ -893,6 +894,18 @@ public interface ApiService {
@GET("users/{user_id}/favorites/answers")
Observable<List<AnswerEntity>> getCollectionAnswer(@Path("user_id") String user_id, @Query("page") int page);
/**
* 专题数据
*/
@GET("communities/{community_id}/columns")
Observable<List<AskSubjectEntity>> getAskSubjectColumn(@Path("community_id") String communityId);
/**
* 社区专题的答案
*/
@GET("communities/{community_id}/columns/{column_id}/answers")
Observable<List<AnswerEntity>> getAskSubjectColumnAnswers(@Path("community_id") String communityId, @Path("column_id") String columnId);
// /**
// * 获取默认社区
// */