From e7ff3ab3270f1bc26594ea284d8e48abbb443883 Mon Sep 17 00:00:00 2001 From: Jack <1484288157@qq.com> Date: Thu, 6 Feb 2020 12:38:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=89=E7=8E=AF=E5=89=8D=E7=AB=AF=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=B1=87=E6=80=BB=EF=BC=882020=E5=B9=B42=E6=9C=88?= =?UTF-8?q?=E7=AC=AC1=E5=91=A8=EF=BC=896=20https://gitlab.ghzs.com/pm/halo?= =?UTF-8?q?-app-issues/issues/771?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/util/SyncDataBetweenPageHelper.kt | 8 ++ .../gh/gamecenter/entity/PersonalEntity.kt | 7 +- .../entity/PersonalHistoryEntity.kt | 26 ++++--- .../gh/gamecenter/entity/RatingReplyEntity.kt | 9 ++- .../fragment/MainWrapperFragment.java | 1 + .../personalhome/home/UserHistoryAdapter.kt | 30 +++++--- .../personalhome/home/UserHistoryFragment.kt | 74 ++++++++++++++++++- .../detail/AnswerDetailContainerFragment.kt | 11 +++ .../qa/answer/detail/AnswerDetailFragment.kt | 2 +- .../article/detail/ArticleDetailActivity.kt | 7 ++ .../detail/QuestionsDetailFragment.kt | 6 ++ 11 files changed, 150 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/gh/common/util/SyncDataBetweenPageHelper.kt b/app/src/main/java/com/gh/common/util/SyncDataBetweenPageHelper.kt index 8772564f33..382040d103 100644 --- a/app/src/main/java/com/gh/common/util/SyncDataBetweenPageHelper.kt +++ b/app/src/main/java/com/gh/common/util/SyncDataBetweenPageHelper.kt @@ -4,6 +4,8 @@ import android.app.Activity import android.content.Context import android.content.Intent import android.os.Parcelable +import androidx.fragment.app.Fragment +import anet.channel.util.Utils.context import com.gh.common.annotation.Synchronize import com.gh.common.util.SyncDataBetweenPageHelper.resultHandle import com.gh.common.util.SyncDataBetweenPageHelper.startActivityForResult @@ -38,6 +40,12 @@ object SyncDataBetweenPageHelper { } } + fun startActivityForResult(fragment: Fragment, intent: Intent, requestCode: Int, dataPosition: Int) { + intent.putExtra(DATA_POSITION_TAG, dataPosition) + intent.putExtra(REQUEST_CODE_TAG, requestCode) + fragment.startActivityForResult(intent, requestCode) + } + fun setResultAndFinish(context: Context, syncData: T?, resultCode: Int = Activity.RESULT_OK): Boolean { if (context is Activity) { val requestCode = context.intent.getIntExtra(REQUEST_CODE_TAG, DEFAULT_NUMBER) diff --git a/app/src/main/java/com/gh/gamecenter/entity/PersonalEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/PersonalEntity.kt index a6d2034102..12a765864a 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/PersonalEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/PersonalEntity.kt @@ -4,6 +4,7 @@ import android.os.Parcelable import com.google.gson.annotations.SerializedName import kotlinx.android.parcel.Parcelize +@Parcelize data class PersonalEntity( @SerializedName("_id") val id: String = "", @@ -13,8 +14,8 @@ data class PersonalEntity( val count: Count = Count(), val auth: Auth? = null, val badge: Badge? = null, - val me: MeEntity = MeEntity()) { - + val me: MeEntity = MeEntity()) : Parcelable { + @Parcelize data class Count( // 包括回答点赞和社区文章点赞 val vote: Int? = 0, @@ -26,7 +27,7 @@ data class PersonalEntity( val communityArticle: Int = 0, @SerializedName("game_comment") val gameComment: Int = 0, - val video: Int = 0) { + val video: Int = 0) : Parcelable { fun getQaCount() = answer + question + communityArticle } diff --git a/app/src/main/java/com/gh/gamecenter/entity/PersonalHistoryEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/PersonalHistoryEntity.kt index bd4e884089..320295be1a 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/PersonalHistoryEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/PersonalHistoryEntity.kt @@ -5,22 +5,23 @@ import com.gh.gamecenter.qa.entity.CommunityVideoEntity import com.google.gson.annotations.SerializedName import kotlinx.android.parcel.Parcelize +@Parcelize data class PersonalHistoryEntity( @SerializedName("_id") val id: String = "", val type: String = "", val question: Question = Question(), - val brief: String = "", + var brief: String = "", var count: Count = Count(), val time: Long = 0, - val title: String = "", + var title: String = "", val community: CommunityEntity = CommunityEntity(), var videos: List = ArrayList(), var user: PersonalEntity? = null, @SerializedName("fold_users") var foldUsers: List? = null, val images: List = ArrayList(), - val comment: Comment = Comment()) { + var comment: Comment = Comment()) :Parcelable{ fun getPassVideos(): List { val passVideos = arrayListOf() @@ -31,23 +32,24 @@ data class PersonalHistoryEntity( } + @Parcelize data class Question( @SerializedName("_id") val id: String = "", - val title: String = "") - + val title: String = ""):Parcelable + @Parcelize data class Count( var comment: Int = -1, - val vote: Int = -1, - val answer: Int = -1, - val reply: Int = -1) - + var vote: Int = -1, + var answer: Int = -1, + var reply: Int = -1):Parcelable + @Parcelize data class Comment( @SerializedName("_id") val id: String = "", - val star: Int = 0, - val content: String = "", - val game: Game = Game()) + var star: Int = 0, + var content: String = "", + val game: Game = Game()):Parcelable @Parcelize data class Game( diff --git a/app/src/main/java/com/gh/gamecenter/entity/RatingReplyEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/RatingReplyEntity.kt index b030abeb1b..af0b17c5e9 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/RatingReplyEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/RatingReplyEntity.kt @@ -1,7 +1,10 @@ package com.gh.gamecenter.entity +import android.os.Parcelable import com.google.gson.annotations.SerializedName +import kotlinx.android.parcel.Parcelize +@Parcelize class RatingReplyEntity(@SerializedName("_id") val id: String = "", val content: String = "", @@ -10,7 +13,7 @@ class RatingReplyEntity(@SerializedName("_id") val user: UserEntity = UserEntity(), var vote: Int = 0, val weight: Int = 0, - val parent: Parent? = null) { - - class Parent(val user: UserEntity) + val parent: Parent? = null) : Parcelable { + @Parcelize + class Parent(val user: UserEntity) : Parcelable } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java index 12bf9fa232..38f2ef5982 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/MainWrapperFragment.java @@ -73,6 +73,7 @@ import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProviders; + import butterknife.BindView; import static com.gh.gamecenter.MainActivity.EB_SKIP_MAIN; diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryAdapter.kt b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryAdapter.kt index b3f6a86040..c6faf47c8b 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryAdapter.kt @@ -18,6 +18,7 @@ import com.gh.gamecenter.entity.PersonalHistoryEntity import com.gh.gamecenter.gamedetail.rating.RatingReplyActivity import com.gh.gamecenter.gamedetail.rating.edit.RatingEditActivity import com.gh.gamecenter.personalhome.PersonalItemViewHolder +import com.gh.gamecenter.personalhome.rating.MyRating import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity @@ -25,7 +26,7 @@ import java.util.regex.Pattern class UserHistoryAdapter(context: Context, private val mListViewModel: UserHistoryViewModel, - private val mEntrance: String) : ListAdapter(context) { + private val mEntrance: String, val itemClickCallback: (historyEntity: PersonalHistoryEntity, position: Int) -> Unit) : ListAdapter(context) { override fun getItemViewType(position: Int): Int { return when { @@ -55,8 +56,8 @@ class UserHistoryAdapter(context: Context, override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (holder) { - is PersonalItemViewHolder -> bindNormalItem(holder) - is PersonalHomeRatingViewHolder -> bindRatingItem(holder) + is PersonalItemViewHolder -> bindNormalItem(holder, position) + is PersonalHomeRatingViewHolder -> bindRatingItem(holder, position) is FooterViewHolder -> { holder.initItemPadding() holder.initFooterViewHolder(mListViewModel, mIsLoading, mIsNetworkError, mIsOver) @@ -64,7 +65,7 @@ class UserHistoryAdapter(context: Context, } } - private fun bindNormalItem(holder: PersonalItemViewHolder) { + private fun bindNormalItem(holder: PersonalItemViewHolder, position: Int) { val historyEntity = mEntityList[holder.adapterPosition] // 微调约束,将问题标题放到用户头像下面 @@ -84,13 +85,14 @@ class UserHistoryAdapter(context: Context, userCommand.text = if (!command.isEmpty()) command else historyEntity?.user?.name + "" questionTitle.setOnClickListener { - if ("community_article" == historyEntity.type || "community_article_vote" == historyEntity.type) { + /*if ("community_article" == historyEntity.type || "community_article_vote" == historyEntity.type) { mContext.startActivity(ArticleDetailActivity.getIntent(mContext, historyEntity.community, historyEntity.id, mEntrance, path)) } else { val id = if (historyEntity.type.contains("question")) historyEntity.id else historyEntity?.question?.id mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, id, mEntrance, path)) - } + }*/ + holder.itemView.performClick() } // 禁止click事件穿透 @@ -98,17 +100,18 @@ class UserHistoryAdapter(context: Context, userCommand.setOnClickListener {} } holder.itemView.setOnClickListener { - if ("community_article" == historyEntity.type || "community_article_vote" == historyEntity.type) { + /*if ("community_article" == historyEntity.type || "community_article_vote" == historyEntity.type) { mContext.startActivity(ArticleDetailActivity.getIntent(mContext, historyEntity.community, historyEntity.id, mEntrance, path)) } else if (!historyEntity.type.contains("question")) { mContext.startActivity(AnswerDetailActivity.getIntent(mContext, historyEntity.id, mEntrance, path)) } else if (historyEntity.type.contains("question")) { mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, historyEntity.id, mEntrance, path)) - } + }*/ + itemClickCallback.invoke(historyEntity, position) } } - private fun bindRatingItem(holder: PersonalHomeRatingViewHolder) { + private fun bindRatingItem(holder: PersonalHomeRatingViewHolder, position: Int) { val historyEntity = mEntityList[holder.adapterPosition] holder.binding.entity = historyEntity val m = Pattern.compile(RatingEditActivity.LABEL_REGEX).matcher(historyEntity.comment.content) @@ -127,11 +130,16 @@ class UserHistoryAdapter(context: Context, GameDetailActivity.startGameDetailActivity(mContext, historyEntity.comment.game.id, mEntrance) } holder.binding.root.setOnClickListener { - val intent = RatingReplyActivity.getIntent(holder.binding.root.context, historyEntity.comment.game.id, historyEntity.comment.id, mEntrance, "个人主页-评论") - holder.binding.root.context.startActivity(intent) +// val intent = RatingReplyActivity.getIntent(holder.binding.root.context, historyEntity.comment.game.id, historyEntity.comment.id, mEntrance, "个人主页-评论") +// holder.binding.root.context.startActivity(intent) + itemClickCallback.invoke(historyEntity, position) } } + fun getEntityList(): List { + return mEntityList + } + override fun getItemCount(): Int { return if (mEntityList == null || mEntityList.isEmpty()) 0 else mEntityList.size + 1 } diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryFragment.kt index 90c70ca22f..f21d9c2dd9 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryFragment.kt @@ -1,5 +1,7 @@ package com.gh.gamecenter.personalhome.home +import android.app.Activity +import android.content.Intent import android.graphics.Color import android.os.Bundle import android.view.LayoutInflater @@ -16,6 +18,14 @@ import com.gh.gamecenter.baselist.ListAdapter import com.gh.gamecenter.baselist.ListFragment import com.gh.gamecenter.entity.PersonalEntity import com.gh.gamecenter.entity.PersonalHistoryEntity +import com.gh.gamecenter.entity.RatingComment +import com.gh.gamecenter.gamedetail.rating.RatingReplyActivity +import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity +import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity +import com.gh.gamecenter.qa.entity.AnswerDetailEntity +import com.gh.gamecenter.qa.entity.ArticleDetailEntity +import com.gh.gamecenter.qa.entity.QuestionsDetailEntity +import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity import com.halo.assistant.HaloApp import kotlinx.android.synthetic.main.fragment_user_history.* @@ -51,7 +61,24 @@ class UserHistoryFragment : ListFragment { if (mAdapter == null) { - mAdapter = UserHistoryAdapter(requireContext(), mListViewModel, mEntrance) + mAdapter = UserHistoryAdapter(requireContext(), mListViewModel, mEntrance) { historyEntity, position -> + if (mScene == UserHistoryViewModel.SCENE.COMMENT) { + val intent = RatingReplyActivity.getIntent(requireContext(), historyEntity.comment.game.id, historyEntity.comment.id, mEntrance, "个人主页-评论") + SyncDataBetweenPageHelper.startActivityForResult(this, intent, 100, position) + } else { + if ("community_article" == historyEntity.type || "community_article_vote" == historyEntity.type) { + val intent = ArticleDetailActivity.getIntent(requireContext(), historyEntity.community, historyEntity.id, mEntrance, "个人主页-问答") + SyncDataBetweenPageHelper.startActivityForResult(this, intent, 101, position) + } else if (!historyEntity.type.contains("question")) { + val intent = AnswerDetailActivity.getIntent(requireContext(), historyEntity.id, mEntrance, "个人主页-问答") + SyncDataBetweenPageHelper.startActivityForResult(this, intent, 102, position) + } else if (historyEntity.type.contains("question")) { + val intent = QuestionsDetailActivity.getIntent(requireContext(), historyEntity.id, mEntrance, "个人主页-问答") + SyncDataBetweenPageHelper.startActivityForResult(this, intent, 103, position) + } + + } + } } return mAdapter!! } @@ -148,6 +175,51 @@ class UserHistoryFragment : ListFragment { + val resultData = data.getParcelableExtra(RatingComment::class.java.simpleName) + historyEntity?.apply { + count.vote = resultData?.vote ?: 0 + count.reply = resultData?.reply ?: 0 + comment.content = resultData?.content ?: "" + comment.star = resultData?.star ?: 0 + } + } + 101 -> { + val resultData = data.getParcelableExtra(ArticleDetailEntity::class.java.simpleName) + historyEntity?.apply { + count.vote = resultData?.count?.vote ?: 0 + count.comment = resultData?.count?.comment ?: 0 + title = resultData?.title ?: "" + brief = resultData?.content ?: "" + } + } + 102 -> { + val resultData = data.getParcelableExtra(AnswerDetailEntity::class.java.simpleName) + historyEntity?.apply { + count.vote = resultData?.vote ?: 0 + count.comment = resultData?.commentCount?:0 + brief = resultData?.content ?: "" + } + } + 103 -> { + val resultData = data.getParcelableExtra(QuestionsDetailEntity::class.java.simpleName) + historyEntity?.apply { + title = resultData?.title ?: "" + count.answer = resultData.answersCount + } + } + } + mAdapter?.notifyItemChanged(dataPosition) + } + } + companion object { fun getInstance(userId: String, scene: UserHistoryViewModel.SCENE, count: PersonalEntity.Count): UserHistoryFragment { return UserHistoryFragment().apply { diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailContainerFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailContainerFragment.kt index a45bac01a7..e250c89fc9 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailContainerFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailContainerFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.MenuItem import android.view.View import com.gh.common.util.EntranceUtils +import com.gh.common.util.SyncDataBetweenPageHelper import com.gh.common.util.observeNonNull import com.gh.common.util.viewModelProviderFromParent import com.gh.gamecenter.R @@ -14,6 +15,7 @@ class AnswerDetailContainerFragment : NormalFragment() { private lateinit var mFragmentAdapter: AnswerDetailFragmentStatePagerAdapter private lateinit var mContainerViewModel: AnswerDetailContainerViewModel + private val fragments=ArrayList() // 是否已经传了 argument 给第一个子 fragment private var mHasPassedOneTimeArgumentToChild = false @@ -53,6 +55,7 @@ class AnswerDetailContainerFragment : NormalFragment() { this.arguments = this@AnswerDetailContainerFragment.arguments this.arguments?.putString(EntranceUtils.KEY_ANSWER_ID, it) mHasPassedOneTimeArgumentToChild = true + fragments.add(this) } } mFragmentAdapter.answerIdList = ArrayList(mContainerViewModel.answerIdList) @@ -91,4 +94,12 @@ class AnswerDetailContainerFragment : NormalFragment() { } } + override fun onBackPressed(): Boolean { + val answerDetail = fragments[0].mViewModel.answerDetail + if (SyncDataBetweenPageHelper.setResultAndFinish(requireActivity(), answerDetail)) { + return true + } + return super.onBackPressed() + } + } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt index 7657b610ad..38b787d492 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt @@ -117,7 +117,7 @@ class AnswerDetailFragment : NormalFragment() { private var mSkeletonScreen: SkeletonScreen? = null private lateinit var mBinding: FragmentAnswerDetailBinding - private lateinit var mViewModel: AnswerDetailViewModel + lateinit var mViewModel: AnswerDetailViewModel private lateinit var mContainerViewModel: AnswerDetailContainerViewModel override fun onCreate(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailActivity.kt index d27642d833..6d3bf57bdd 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailActivity.kt @@ -804,6 +804,13 @@ class ArticleDetailActivity : ToolBarActivity() { } } + override fun handleBackPressed(): Boolean { + if (SyncDataBetweenPageHelper.setResultAndFinish(this, mViewModel.detailEntity)) { + return true + } + return super.handleBackPressed() + } + @Subscribe(threadMode = ThreadMode.MAIN) fun onEventMainThread(reuse: EBReuse) { if (reuse.type == PersonalFragment.LOGIN_TAG) { // 登入 diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.kt index 3427db9d3f..ba56eff5b0 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.kt @@ -608,6 +608,12 @@ class QuestionsDetailFragment : mListViewModel.load(LoadType.REFRESH) } + override fun onBackPressed(): Boolean { + if (SyncDataBetweenPageHelper.setResultAndFinish(requireActivity(), mQuestionsDetailEntity)) { + return true + } + return super.onBackPressed() + } companion object { const val QUESTIONS_DETAIL_ANSWER_REQUEST = 110 const val QUESTIONS_EDIT_REQUEST = 111