diff --git a/app/proguard-rules.txt b/app/proguard-rules.txt index 5853f0f704..f7ce72c812 100644 --- a/app/proguard-rules.txt +++ b/app/proguard-rules.txt @@ -140,6 +140,7 @@ -keep class com.gh.common.view.** {*;} -keep class com.gh.gamecenter.db.info.** {*;} -keep class com.gh.gamecenter.entity.** {*;} +-keep class com.gh.gamecenter.ask.entity.** {*;} -keep class com.gh.gamecenter.retrofit.** {*;} -keep class com.gh.gamecenter.eventbus.** {*;} -keep class * extends rx.Subscriber diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskAnswerDetailFragment.java b/app/src/main/java/com/gh/gamecenter/ask/AskAnswerDetailFragment.java index 092f4766dd..143fb40127 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskAnswerDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskAnswerDetailFragment.java @@ -126,7 +126,7 @@ public class AskAnswerDetailFragment extends NormalFragment { mUsername.setText(user.getName()); } - mTitle.setText(mAnswerEntity.getQuestionTitle()); + mTitle.setText(mAnswerEntity.getQuestions().getTitle()); mRichEditor.setHtml(mDetailEntity.getContent()); mRichEditor.setInputEnabled(false); diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewBodyAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewBodyAdapter.java index 8445aa73f9..e294418c3c 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewBodyAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewBodyAdapter.java @@ -78,10 +78,7 @@ public class AskQuestionsNewBodyAdapter extends ListAdapter { public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { switch (getItemViewType(position)) { case ItemViewType.ITEM_BODY: - Questions questions = mEntityList.get(position); - AskQuestionsNewViewHolder askHolder = (AskQuestionsNewViewHolder) holder; - askHolder.mAnswerCount.setText(mContext.getString(R.string.ask_answer_count, questions.getAnswerCount())); - askHolder.mTitle.setText(questions.getTitle()); + ((AskQuestionsNewViewHolder) holder).initAskQuestionsNewViewHolder(mEntityList.get(position)); break; case ItemViewType.ITEM_FOOTER: FooterViewHolder footerViewHolder = (FooterViewHolder) holder; diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewViewHolder.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewViewHolder.java index 0510a2b3de..0a8c2d58bc 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewViewHolder.java @@ -6,6 +6,7 @@ import android.widget.TextView; import com.gh.base.BaseRecyclerViewHolder; import com.gh.base.OnListClickListener; import com.gh.gamecenter.R; +import com.gh.gamecenter.ask.entity.Questions; import butterknife.BindView; @@ -24,4 +25,9 @@ public class AskQuestionsNewViewHolder extends BaseRecyclerViewHolder { super(itemView, data, listClickListener); itemView.setOnClickListener(this); } + + public void initAskQuestionsNewViewHolder(Questions questions) { + mAnswerCount.setText(itemView.getContext().getString(R.string.ask_answer_count, questions.getAnswerCount())); + mTitle.setText(questions.getTitle()); + } } diff --git a/app/src/main/java/com/gh/gamecenter/ask/QuestionsEditFragment.java b/app/src/main/java/com/gh/gamecenter/ask/QuestionsEditFragment.java index 97abd7e384..db23029475 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/QuestionsEditFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/QuestionsEditFragment.java @@ -121,6 +121,12 @@ public class QuestionsEditFragment extends NormalFragment { return R.layout.fragment_questions_edit; } + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getCommunitiesTags(); + } + @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -170,15 +176,39 @@ public class QuestionsEditFragment extends NormalFragment { } } + private void getCommunitiesTags() { + + RetrofitManager.getInstance(getContext()).getApi() + .getCommunitiesTags(UserManager.getInstance().getCommunityId(getContext())) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response>() { + @Override + public void onResponse(List response) { + for (String s : response) { + addTag(s, true); + } + } + + @Override + public void onFailure(HttpException e) { + Utils.log("QuestionsEdit-> getCommunitiesTags: onFailure"); + } + }); + + } + private void postQuestions(List imgs) { String title = mTitle.getText().toString(); if (TextUtils.isEmpty(title)) { toast("标题不能为空"); + mPostDialog.dismissAllowingStateLoss(); return; } String content = mContent.getText().toString(); if (TextUtils.isEmpty(content)) { toast("内容不能为空"); + mPostDialog.dismissAllowingStateLoss(); return; } diff --git a/app/src/main/java/com/gh/gamecenter/ask/entity/AnswerEntity.kt b/app/src/main/java/com/gh/gamecenter/ask/entity/AnswerEntity.kt index 030968255a..efc36cbaaa 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/entity/AnswerEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/ask/entity/AnswerEntity.kt @@ -15,18 +15,19 @@ class AnswerEntity() : Parcelable { var brief: String? = null - var questionTitle: String? = null - var images: List? = null var vote: Int = 0 var user: UserEntity? = null + @SerializedName("question") + var questions: Questions = Questions() + constructor(parcel: Parcel) : this() { id = parcel.readString() brief = parcel.readString() - questionTitle = parcel.readString() + questions = parcel.readParcelable(Questions::class.java.classLoader) images = parcel.createStringArrayList() vote = parcel.readInt() user = parcel.readParcelable(UserEntity::class.java.classLoader) @@ -35,7 +36,7 @@ class AnswerEntity() : Parcelable { override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeString(id) parcel.writeString(brief) - parcel.writeString(questionTitle) + parcel.writeParcelable(questions, flags) parcel.writeStringList(images) parcel.writeInt(vote) parcel.writeParcelable(user, flags) diff --git a/app/src/main/java/com/gh/gamecenter/ask/entity/Questions.kt b/app/src/main/java/com/gh/gamecenter/ask/entity/Questions.kt index 99c9cd4090..1fc896e5f3 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/entity/Questions.kt +++ b/app/src/main/java/com/gh/gamecenter/ask/entity/Questions.kt @@ -1,19 +1,45 @@ package com.gh.gamecenter.ask.entity +import android.os.Parcel +import android.os.Parcelable import com.google.gson.annotations.SerializedName /** * Created by khy on 11/12/17. */ -class Questions { +class Questions() : Parcelable { @SerializedName("_id") var id: String? = null var title: String? = null - var answers: String? = null - @SerializedName("answer_count") var answerCount: Int = 0 + + constructor(parcel: Parcel) : this() { + id = parcel.readString() + title = parcel.readString() + answerCount = parcel.readInt() + } + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeString(id) + parcel.writeString(title) + parcel.writeInt(answerCount) + } + + override fun describeContents(): Int { + return 0 + } + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): Questions { + return Questions(parcel) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/ask/myask/ConcernQuestionsAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/myask/ConcernQuestionsAdapter.java new file mode 100644 index 0000000000..514c862fed --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/ConcernQuestionsAdapter.java @@ -0,0 +1,97 @@ +package com.gh.gamecenter.ask.myask; + +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.AskQuestionsNewViewHolder; +import com.gh.gamecenter.ask.entity.Questions; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.LoadStatus; + +import java.util.List; + +/** + * Created by khy on 20/12/17. + */ + +class ConcernQuestionsAdapter extends ListAdapter { + + private OnListClickListener mListClickListener; + + private List mEntityList; + + + public ConcernQuestionsAdapter(Context context, OnListClickListener listClickListener) { + super(context); + mListClickListener = listClickListener; + } + + @Override + protected void provideListData(List listData) { + mEntityList = (List) listData; + notifyDataSetChanged(); + } + + @Override + protected void loadChange(LoadStatus status) { + switch (status) { + case OVER: + mIsOver = true; + break; + case ERROR: + mIsNetworkError = true; + break; + case RETRY: + mIsNetworkError = false; + break; + } + notifyItemChanged(getItemCount() - 1); + } + + @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, null, mListClickListener); + case ItemViewType.ITEM_BODY: + view = mLayoutInflater.inflate(R.layout.ask_questions_new_item, parent, false); + return new AskQuestionsNewViewHolder(view, mEntityList, mListClickListener); + default: + return null; + } + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + switch (getItemViewType(position)) { + case ItemViewType.ITEM_BODY: + ((AskQuestionsNewViewHolder) holder).initAskQuestionsNewViewHolder(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/myask/ConcernQuestionsFragment.java b/app/src/main/java/com/gh/gamecenter/ask/myask/ConcernQuestionsFragment.java new file mode 100644 index 0000000000..09a70e9651 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/ConcernQuestionsFragment.java @@ -0,0 +1,42 @@ +package com.gh.gamecenter.ask.myask; + +import android.view.View; + +import com.gh.gamecenter.AskQuestionsDetailActivity; +import com.gh.gamecenter.R; +import com.gh.gamecenter.ask.entity.Questions; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import java.util.List; + +import rx.Observable; + +/** + * Created by khy on 20/12/17. + */ + +public class ConcernQuestionsFragment extends ListFragment { + + private ConcernQuestionsAdapter mAdapter; + + @Override + protected ListAdapter provideListAdapter() { + return mAdapter == null ? mAdapter = new ConcernQuestionsAdapter(getContext(), this) : mAdapter; + } + + + @Override + public Observable> provideDataObservable() { + return RetrofitManager.getInstance(getContext()).getApi().getConcernQuestions(getListOffset()); + } + + @Override + public void onListClick(View view, int position, Object data) { + if (view.getId() == R.id.ask_questions_new_item) { + List questionsList = (List) data; + startActivity(AskQuestionsDetailActivity.getIntent(getContext(), questionsList.get(position).getId())); + } + } +} 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 new file mode 100644 index 0000000000..1a4c848081 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerAdapter.java @@ -0,0 +1,95 @@ +package com.gh.gamecenter.ask.myask; + +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.ask.questionsdetail.AnswerViewHolder; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.LoadStatus; + +import java.util.List; + +/** + * Created by khy on 20/12/17. + */ + +class MyAnswerAdapter extends ListAdapter { + + private OnListClickListener mListClickListener; + + private List mEntityList; + + MyAnswerAdapter(Context context, OnListClickListener listClickListener) { + super(context); + mListClickListener = listClickListener; + } + + @Override + protected void provideListData(List listData) { + mEntityList = (List) listData; + notifyDataSetChanged(); + } + + @Override + protected void loadChange(LoadStatus status) { + switch (status) { + case OVER: + mIsOver = true; + break; + case ERROR: + mIsNetworkError = true; + break; + case RETRY: + mIsNetworkError = false; + break; + } + notifyItemChanged(getItemCount() - 1); + } + + @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, null, mListClickListener); + case ItemViewType.ITEM_BODY: + view = mLayoutInflater.inflate(R.layout.ask_answer_item, parent, false); + return new AnswerViewHolder(view, mEntityList, mListClickListener); + default: + return null; + } + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + switch (getItemViewType(position)) { + case ItemViewType.ITEM_BODY: + ((AnswerViewHolder) holder).initMyAnswerViewHolder(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/myask/MyAnswerFragment.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerFragment.java new file mode 100644 index 0000000000..6136cacc87 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyAnswerFragment.java @@ -0,0 +1,46 @@ +package com.gh.gamecenter.ask.myask; + +import android.os.Bundle; +import android.view.View; + +import com.gh.gamecenter.NormalActivity; +import com.gh.gamecenter.R; +import com.gh.gamecenter.ask.AskAnswerDetailFragment; +import com.gh.gamecenter.ask.entity.AnswerEntity; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.manager.UserManager; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import java.util.List; + +import rx.Observable; + +/** + * Created by khy on 20/12/17. + */ + +public class MyAnswerFragment extends ListFragment { + + private MyAnswerAdapter mAdapter; + + @Override + protected ListAdapter provideListAdapter() { + return mAdapter == null ? mAdapter = new MyAnswerAdapter(getContext(), this) : mAdapter; + } + + @Override + public Observable> provideDataObservable() { + return RetrofitManager.getInstance(getContext()).getApi().getMyAnswers(UserManager.getInstance().getUserId(), getListOffset()); + } + + @Override + public void onListClick(View view, int position, Object data) { + if (view.getId() == R.id.ask_answer_item_constraintlayout) { + List entityList = (List) data; + Bundle bundle = new Bundle(); + bundle.putParcelable(AnswerEntity.TAG, entityList.get(position)); + NormalActivity.startFragment(getContext(), AskAnswerDetailFragment.class, bundle); + } + } +} diff --git a/app/src/main/java/com/gh/gamecenter/ask/myask/MyAskFragment.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyAskFragment.java new file mode 100644 index 0000000000..948f905cd4 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyAskFragment.java @@ -0,0 +1,27 @@ +package com.gh.gamecenter.ask.myask; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.View; + +import com.gh.gamecenter.R; +import com.gh.gamecenter.normal.NormalFragment; + +/** + * Created by khy on 20/12/17. + */ + +public class MyAskFragment extends NormalFragment { + @Override + protected int getLayoutId() { + return R.layout.fragment_myask; + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + setNavigationTitle(R.string.myask); + getChildFragmentManager().beginTransaction() + .replace(R.id.layout_fragment_content, new MyAskWrapperFragment()).commitAllowingStateLoss(); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/ask/myask/MyAskWrapperFragment.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyAskWrapperFragment.java new file mode 100644 index 0000000000..1fe65cac28 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyAskWrapperFragment.java @@ -0,0 +1,79 @@ +package com.gh.gamecenter.ask.myask; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.util.DisplayMetrics; +import android.view.View; +import android.widget.LinearLayout; + +import com.gh.base.fragment.BaseFragment_ViewPager_Checkable; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.RandomUtils; +import com.gh.gamecenter.R; + +import java.util.List; + +import butterknife.BindView; + +/** + * Created by khy on 20/12/17. + */ + +public class MyAskWrapperFragment extends BaseFragment_ViewPager_Checkable { + + @BindView(R.id.myask_slide_line) + View mSlideLine; + + private int mWindowWidth; + private LinearLayout.LayoutParams mLayoutParams; + + @Override + protected boolean getSmoothScroll() { + return true; + } + + @Override + protected int getCheckableGroupId() { + return R.id.lightgame_tab_container; + } + + @Override + protected int getLayoutId() { + return R.layout.fragment_wrapper_myask; + } + + @Override + protected int getViewPagerId() { + return R.id.lightgame_tab_viewpager; + } + + @Override + protected void initFragmentList(List fragments) { + fragments.add(new ConcernQuestionsFragment()); + fragments.add(new MyQuestionsFragment()); + fragments.add(new MyAnswerFragment()); + fragments.add(new MyDraftFragment()); + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + DisplayMetrics outMetrics = new DisplayMetrics(); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); + mWindowWidth = outMetrics.widthPixels / 4; + mLayoutParams = new LinearLayout.LayoutParams(mWindowWidth / 2, DisplayUtils.dip2px(getActivity(), 2)); + mLayoutParams.leftMargin = RandomUtils.getInt(mWindowWidth * (mCheckedIndex + 0.25f)); + mSlideLine.setLayoutParams(mLayoutParams); + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + super.onPageScrolled(position, positionOffset, positionOffsetPixels); + if (positionOffset != 0) { + mLayoutParams.leftMargin = RandomUtils.getInt(mWindowWidth * (position + positionOffset + 0.25f)); + mSlideLine.setLayoutParams(mLayoutParams); + } + } + +} 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 new file mode 100644 index 0000000000..b04145da04 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftAdapter.java @@ -0,0 +1,95 @@ +package com.gh.gamecenter.ask.myask; + +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.ask.questionsdetail.AnswerViewHolder; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.LoadStatus; + +import java.util.List; + +/** + * Created by khy on 20/12/17. + */ + +class MyDraftAdapter extends ListAdapter { + + private OnListClickListener mListClickListener; + + private List mEntityList; + + MyDraftAdapter(Context context, OnListClickListener listClickListener) { + super(context); + mListClickListener = listClickListener; + } + + @Override + protected void provideListData(List listData) { + mEntityList = (List) listData; + notifyDataSetChanged(); + } + + @Override + protected void loadChange(LoadStatus status) { + switch (status) { + case OVER: + mIsOver = true; + break; + case ERROR: + mIsNetworkError = true; + break; + case RETRY: + mIsNetworkError = false; + break; + } + notifyItemChanged(getItemCount() - 1); + } + + @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, null, mListClickListener); + case ItemViewType.ITEM_BODY: + view = mLayoutInflater.inflate(R.layout.ask_answer_item, parent, false); + return new AnswerViewHolder(view, mEntityList, mListClickListener); + default: + return null; + } + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + switch (getItemViewType(position)) { + case ItemViewType.ITEM_BODY: + ((AnswerViewHolder) holder).initAnswerViewHolder(mContext, 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/myask/MyDraftFragment.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftFragment.java new file mode 100644 index 0000000000..56afe89584 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftFragment.java @@ -0,0 +1,37 @@ +package com.gh.gamecenter.ask.myask; + +import android.support.annotation.Nullable; + +import com.gh.gamecenter.ask.entity.AnswerEntity; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.manager.UserManager; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import java.util.List; + +import rx.Observable; + +/** + * Created by khy on 20/12/17. + */ + +public class MyDraftFragment extends ListFragment { + + private MyDraftAdapter mAdapter; + + @Override + protected ListAdapter provideListAdapter() { + return mAdapter == null ? mAdapter = new MyDraftAdapter(getContext(), this) : mAdapter; + } + + @Override + public void onChanged(@Nullable Object o) { + + } + + @Override + public Observable> provideDataObservable() { + return RetrofitManager.getInstance(getContext()).getApi().getMyAnswerDrafts(UserManager.getInstance().getUserId(), getListOffset()); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/ask/myask/MyQuestionsAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyQuestionsAdapter.java new file mode 100644 index 0000000000..35b865d146 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyQuestionsAdapter.java @@ -0,0 +1,97 @@ +package com.gh.gamecenter.ask.myask; + +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.AskQuestionsNewViewHolder; +import com.gh.gamecenter.ask.entity.Questions; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.LoadStatus; + +import java.util.List; + +/** + * Created by khy on 20/12/17. + */ + +public class MyQuestionsAdapter extends ListAdapter { + + private OnListClickListener mListClickListener; + + private List mEntityList; + + + public MyQuestionsAdapter(Context context, OnListClickListener listClickListener) { + super(context); + mListClickListener = listClickListener; + } + + @Override + protected void provideListData(List listData) { + mEntityList = (List) listData; + notifyDataSetChanged(); + } + + @Override + protected void loadChange(LoadStatus status) { + switch (status) { + case OVER: + mIsOver = true; + break; + case ERROR: + mIsNetworkError = true; + break; + case RETRY: + mIsNetworkError = false; + break; + } + notifyItemChanged(getItemCount() - 1); + } + + @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, null, mListClickListener); + case ItemViewType.ITEM_BODY: + view = mLayoutInflater.inflate(R.layout.ask_questions_new_item, parent, false); + return new AskQuestionsNewViewHolder(view, mEntityList, mListClickListener); + default: + return null; + } + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + switch (getItemViewType(position)) { + case ItemViewType.ITEM_BODY: + ((AskQuestionsNewViewHolder) holder).initAskQuestionsNewViewHolder(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/myask/MyQuestionsFragment.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyQuestionsFragment.java new file mode 100644 index 0000000000..b645d7f557 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyQuestionsFragment.java @@ -0,0 +1,42 @@ +package com.gh.gamecenter.ask.myask; + +import android.view.View; + +import com.gh.gamecenter.AskQuestionsDetailActivity; +import com.gh.gamecenter.R; +import com.gh.gamecenter.ask.entity.Questions; +import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.manager.UserManager; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import java.util.List; + +import rx.Observable; + +/** + * Created by khy on 20/12/17. + */ + +public class MyQuestionsFragment extends ListFragment { + + private MyQuestionsAdapter mAdapter; + + @Override + protected ListAdapter provideListAdapter() { + return mAdapter == null ? mAdapter = new MyQuestionsAdapter(getContext(), this) : mAdapter; + } + + @Override + public Observable> provideDataObservable() { + return RetrofitManager.getInstance(getContext()).getApi().getMyQuestions(UserManager.getInstance().getUserId(), getListOffset()); + } + + @Override + public void onListClick(View view, int position, Object data) { + if (view.getId() == R.id.ask_questions_new_item) { + List questionsList = (List) data; + startActivity(AskQuestionsDetailActivity.getIntent(getContext(), questionsList.get(position).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 1e54a39971..6a171e47e3 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 @@ -38,7 +38,18 @@ public class AnswerFoldAdapter extends ListAdapter { @Override protected void loadChange(LoadStatus status) { - + switch (status) { + case OVER: + mIsOver = true; + break; + case ERROR: + mIsNetworkError = true; + break; + case RETRY: + mIsNetworkError = false; + break; + } + notifyItemChanged(getItemCount() - 1); } @Override 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 e611d5ea8c..0d3b006582 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 @@ -32,6 +32,8 @@ public class AnswerViewHolder extends BaseRecyclerViewHolder { SimpleDraweeView mImg; @BindView(R.id.ask_answer_item_votecount) TextView mVotecount; + @BindView(R.id.ask_answer_item_title) + TextView mQuestionTitle; public AnswerViewHolder(View itemView, Object data, OnListClickListener listClickListener) { super(itemView, data, listClickListener); @@ -54,4 +56,20 @@ public class AnswerViewHolder extends BaseRecyclerViewHolder { mImg.setVisibility(View.GONE); } } + + public void initMyAnswerViewHolder(AnswerEntity entity) { + mUsername.setVisibility(View.GONE); + mUsericon.setVisibility(View.GONE); + mQuestionTitle.setVisibility(View.VISIBLE); + mQuestionTitle.setText(entity.getQuestions().getTitle()); + mContent.setText(entity.getBrief()); + mVotecount.setText(itemView.getContext().getString(R.string.ask_vote_count, entity.getVote())); + List images = entity.getImages(); + if (images != null && images.size() > 0) { + mImg.setVisibility(View.VISIBLE); + ImageUtils.Companion.display(mImg, images.get(0)); + } else { + mImg.setVisibility(View.GONE); + } + } } 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 43a24d7fca..ed2197dc88 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 @@ -12,6 +12,7 @@ import com.gh.gamecenter.NormalActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.ask.AskAnswerDetailFragment; import com.gh.gamecenter.ask.entity.AnswerEntity; +import com.gh.gamecenter.ask.entity.Questions; import com.gh.gamecenter.ask.entity.QuestionsDetailEntity; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; @@ -110,7 +111,9 @@ public class QuestionsDetailFragment extends ListFragment { case R.id.ask_answer_item_constraintlayout: List entityList = (List) data; AnswerEntity entity = entityList.get(position - ListAdapter.TOP_ITEM_COUNT); - entity.setQuestionTitle(mAdapter.getQuestionsTitle()); + Questions questions = entity.getQuestions(); + questions.setTitle(mAdapter.getQuestionsTitle()); + entity.setQuestions(questions); Bundle bundle = new Bundle(); bundle.putParcelable(AnswerEntity.TAG, entity); NormalActivity.startFragment(getContext(), AskAnswerDetailFragment.class, bundle); diff --git a/app/src/main/java/com/gh/gamecenter/entity/UserInfoEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/UserInfoEntity.kt index 84e7ad0f12..e41f5c2a59 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/UserInfoEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/UserInfoEntity.kt @@ -3,6 +3,7 @@ package com.gh.gamecenter.entity import android.arch.persistence.room.Entity import android.arch.persistence.room.PrimaryKey import android.support.annotation.NonNull +import com.google.gson.annotations.SerializedName /** * Created by khy on 17/07/17. @@ -14,6 +15,9 @@ class UserInfoEntity { @NonNull var id: String? = null + @SerializedName("_id") + var userId: String? = null + var name: String? = null var icon: String? = null diff --git a/app/src/main/java/com/gh/gamecenter/manager/UserManager.java b/app/src/main/java/com/gh/gamecenter/manager/UserManager.java index d5d70a1313..70bedee85d 100644 --- a/app/src/main/java/com/gh/gamecenter/manager/UserManager.java +++ b/app/src/main/java/com/gh/gamecenter/manager/UserManager.java @@ -54,6 +54,13 @@ public class UserManager { return null; } + public String getUserId() { + if (mUserInfoEntity != null) { + return mUserInfoEntity.getUserId(); + } + return ""; + } + public void setCommunityId(Context context, String communityId) { if (!mCommunityId.equals(communityId)) { PreferenceManager.getDefaultSharedPreferences(context).edit().putString(COMMUNITY_ID, communityId).apply(); diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java index 834fd5e2dc..bcd87a7122 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java @@ -25,11 +25,13 @@ import com.gh.gamecenter.InstallActivity; import com.gh.gamecenter.LibaoActivity; import com.gh.gamecenter.LoginActivity; import com.gh.gamecenter.MessageActivity; +import com.gh.gamecenter.NormalActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.ShareGhActivity; import com.gh.gamecenter.SuggestSelectActivity; import com.gh.gamecenter.SuggestionActivity; import com.gh.gamecenter.UserInfoActivity; +import com.gh.gamecenter.ask.myask.MyAskFragment; import com.gh.gamecenter.entity.AppEntity; import com.gh.gamecenter.entity.LoginTokenEntity; import com.gh.gamecenter.entity.MessageUnreadEntity; @@ -108,6 +110,8 @@ public class PersonalFragment extends BaseFragment implements Observer postAnswerVote(@Path("answer_id") String answerId); + + /** + * 获取用户的问题列表 + */ + @GET("users/{user_id}/questions") + Observable> getMyQuestions(@Path("user_id") String userId, @Query("offset") int offset); + + /** + * 获取用户的答案列表 + */ + @GET("users/{user_id}/answers") + Observable> getMyAnswers(@Path("user_id") String userId, @Query("offset") int offset); + + /** + * 获取用户的草稿列表 + */ + @GET("users/{user_id}/answer_drafts") + Observable> getMyAnswerDrafts(@Path("user_id") String userId, @Query("offset") int offset); + + @GET("questions/concern") + Observable> getConcernQuestions(@Query("offset") int offset); } \ No newline at end of file diff --git a/app/src/main/res/drawable-xxhdpi/personal_ask_icon.png b/app/src/main/res/drawable-xxhdpi/personal_ask_icon.png new file mode 100644 index 0000000000..75392c2615 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/personal_ask_icon.png differ diff --git a/app/src/main/res/layout/ask_answer_item.xml b/app/src/main/res/layout/ask_answer_item.xml index b72477af20..5d9228bf8a 100644 --- a/app/src/main/res/layout/ask_answer_item.xml +++ b/app/src/main/res/layout/ask_answer_item.xml @@ -30,7 +30,6 @@ app:layout_constraintLeft_toRightOf = "@id/ask_answer_item_usericon" app:layout_constraintTop_toTopOf = "@id/ask_answer_item_usericon" /> - + android:paddingRight = "20dp" + android:paddingBottom="20dp"> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_personal.xml b/app/src/main/res/layout/fragment_personal.xml index bbfc578be2..69be4a1f01 100644 --- a/app/src/main/res/layout/fragment_personal.xml +++ b/app/src/main/res/layout/fragment_personal.xml @@ -245,6 +245,37 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_wrapper_myask.xml b/app/src/main/res/layout/fragment_wrapper_myask.xml new file mode 100644 index 0000000000..2900eeacef --- /dev/null +++ b/app/src/main/res/layout/fragment_wrapper_myask.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 404271f010..8647f76b0e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -462,9 +462,9 @@ 点我提问 查看折叠答案 没有我的游戏?点击提交 - - %1$d 回答 - %1$d 赞同 + + %1$d 回答 + %1$d 赞同 已投 投票 礼包中心 @@ -478,4 +478,7 @@ 邀请成功 邀请失败 + 我的问答 + 我的问答 +