diff --git a/app/src/main/java/com/gh/common/util/EntranceUtils.java b/app/src/main/java/com/gh/common/util/EntranceUtils.java index c957a38ef3..908fb35f05 100644 --- a/app/src/main/java/com/gh/common/util/EntranceUtils.java +++ b/app/src/main/java/com/gh/common/util/EntranceUtils.java @@ -65,6 +65,7 @@ public class EntranceUtils { public static final String KEY_QUESTIONS_ID = "questionsId"; public static final String KEY_QUESTIONS_TITLE = "questionsTitle"; public static final String KEY_QUESTIONS_PATCH = "questionsPatch"; + public static final String KEY_INVITE_SEARCH_KEY = "inviteSearchKey"; public static void jumpActivity(Context context, Bundle bundle) { diff --git a/app/src/main/java/com/gh/common/util/ShareUtils.java b/app/src/main/java/com/gh/common/util/ShareUtils.java index a753798aff..4172c5fd57 100644 --- a/app/src/main/java/com/gh/common/util/ShareUtils.java +++ b/app/src/main/java/com/gh/common/util/ShareUtils.java @@ -147,6 +147,7 @@ public class ShareUtils { public void showShareWindows(Activity activity, View view, String url, String icon, String shareTitle, String shareSummary, ShareType shareType) { + if (activity.isFinishing()) return; this.mActivity = activity; this.shareIcon = icon; this.shareUrl = url; @@ -154,7 +155,7 @@ public class ShareUtils { this.mTitle = shareTitle; this.mShareType = shareType; - View contentView = View.inflate(mContext, R.layout.share_popup_layout, null); + View contentView = View.inflate(mActivity, R.layout.share_popup_layout, null); contentView.setFocusable(true); contentView.setFocusableInTouchMode(true); RecyclerView shareRecyclerView = (RecyclerView) contentView.findViewById(R.id.share_rv); @@ -190,7 +191,11 @@ public class ShareUtils { popupWindow = new PopupWindow(contentView, LinearLayout.LayoutParams.MATCH_PARENT , LinearLayout.LayoutParams.MATCH_PARENT, true); popupWindow.setAnimationStyle(R.style.mypopwindow_anim_style); - popupWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0); + try { + popupWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0); + } catch (Exception e) { + e.printStackTrace(); + } contentView.setOnClickListener(new View.OnClickListener() { @Override diff --git a/app/src/main/java/com/gh/gamecenter/QuestionsDetailActivity.java b/app/src/main/java/com/gh/gamecenter/QuestionsDetailActivity.java index 25b8e95266..e4c6bdc527 100644 --- a/app/src/main/java/com/gh/gamecenter/QuestionsDetailActivity.java +++ b/app/src/main/java/com/gh/gamecenter/QuestionsDetailActivity.java @@ -17,12 +17,13 @@ import com.gh.gamecenter.ask.entity.QuestionsDetailEntity; import com.gh.gamecenter.ask.questionsdetail.AnswerEditFragment; import com.gh.gamecenter.ask.questionsdetail.AnswerFoldFragment; import com.gh.gamecenter.ask.questionsdetail.QuestionsDetailFragment; -import com.gh.gamecenter.ask.questionsdetail.QuestionsInviteFragment; +import com.gh.gamecenter.ask.questionsdetail.invite.QuestionsInviteFragment; /** * Created by khy on 7/12/17. */ +@Deprecated public class QuestionsDetailActivity extends BaseActivity implements FragmentManager.OnBackStackChangedListener, View.OnClickListener { public static final String TAG = "QuestionsDetailActivity"; @@ -87,20 +88,20 @@ public class QuestionsDetailActivity extends BaseActivity implements FragmentMan @Override public void onClick(View view) { if (view == mShareIv) { - String shreIcon; + String shareIcon; QuestionsDetailEntity data = mQuestionsDetailFragment.getQuestionsDetailData(); if (data == null) return; if (data.getImages().size() > 0) { - shreIcon = data.getImages().get(0); + shareIcon = data.getImages().get(0); } else { - shreIcon = getString(R.string.share_ghzs_logo); + shareIcon = getString(R.string.share_ghzs_logo); } String description = data.getDescription(); if (TextUtils.isEmpty(description)) { description = getString(R.string.ask_share_default_summary); } ShareUtils.getInstance(this).showShareWindows(this, view, getString(R.string.share_questions_url, data.getId()) - , shreIcon + , shareIcon , getString(R.string.ask_share_questions_title, data.getTitle(), data.getAnswersCount()) , description, ShareUtils.ShareType.askNormal); } diff --git a/app/src/main/java/com/gh/gamecenter/ToolBoxActivity.java b/app/src/main/java/com/gh/gamecenter/ToolBoxActivity.java index 263db5bef1..9f48f5558e 100644 --- a/app/src/main/java/com/gh/gamecenter/ToolBoxActivity.java +++ b/app/src/main/java/com/gh/gamecenter/ToolBoxActivity.java @@ -47,7 +47,7 @@ public class ToolBoxActivity extends BaseActivity implements SwipeRefreshLayout. private boolean mIsSearch; // 记录页面状态 搜索页面/普通页面 - private String mSearckKey; // 记录搜索关键字 + private String mSearchKey; // 记录搜索关键字 Runnable runnable = new Runnable() { @Override @@ -80,7 +80,7 @@ public class ToolBoxActivity extends BaseActivity implements SwipeRefreshLayout. mLayoutManager = new LinearLayoutManager(this); mToolboxRv.setLayoutManager(mLayoutManager); - mRvAdapter = new ToolBoxRvAdapter(this, this, ToolBoxActivity.this, mIsSearch, mSearckKey); + mRvAdapter = new ToolBoxRvAdapter(this, this, ToolBoxActivity.this, mIsSearch, mSearchKey); mToolboxRv.addItemDecoration(new VerticalItemDecoration(this, 8, false)); mToolboxRv.setAdapter(mRvAdapter); @@ -164,13 +164,13 @@ public class ToolBoxActivity extends BaseActivity implements SwipeRefreshLayout. mLoading.setVisibility(View.VISIBLE); } mIsSearch = isSearch; - mSearckKey = searchKey; + mSearchKey = searchKey; changeAdapter(false); } private void changeAdapter(boolean isRefresh) { if (mIsSearch) { - mRvAdapter = new ToolBoxRvAdapter(this, this, this, mIsSearch, mSearckKey); + mRvAdapter = new ToolBoxRvAdapter(this, this, this, mIsSearch, mSearchKey); } else { if (mNormalRvAdapter != null && !isRefresh) { mRvAdapter = mNormalRvAdapter; diff --git a/app/src/main/java/com/gh/gamecenter/adapter/ToolBoxRvAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/ToolBoxRvAdapter.java index 1725873c4c..470e4a3529 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/ToolBoxRvAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/ToolBoxRvAdapter.java @@ -50,10 +50,10 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter { private List mEntityList; private List mConcernList; - private String mSerchKey; + private String mSearchKey; private String mToken; - private boolean mLoadConcernDtatOver; + private boolean mLoadConcernDataOver; private boolean mIsSearch; private boolean mIsLoading; private boolean mIsOver; @@ -63,7 +63,7 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter { boolean isSearch, String key) { super(context); this.mIsSearch = isSearch; - this.mSerchKey = key; + this.mSearchKey = key; mToken = UserManager.getInstance().getToken(); mSearchListener = searchListener; @@ -79,15 +79,15 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter { } mIsLoading = true; - if (offset > 0 && !isSearch && mLoadConcernDtatOver) { + if (offset > 0 && !isSearch && mLoadConcernDataOver) { offset = offset - mConcernList.size(); } Observable> api; - if (!TextUtils.isEmpty(mToken) && !mLoadConcernDtatOver) { - api = RetrofitManager.getInstance(mContext).getApi().getConcernToolKitData(offset, mSerchKey); + if (!TextUtils.isEmpty(mToken) && !mLoadConcernDataOver) { + api = RetrofitManager.getInstance(mContext).getApi().getConcernToolKitData(offset, mSearchKey); } else { - api = RetrofitManager.getInstance(mContext).getApi().getToolKitData(offset, mSerchKey); + api = RetrofitManager.getInstance(mContext).getApi().getToolKitData(offset, mSearchKey); } api .subscribeOn(Schedulers.io()) @@ -96,10 +96,10 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter { @Override public void onResponse(List response) { super.onResponse(response); - if (!mLoadConcernDtatOver && response.size() < 20) { + if (!mLoadConcernDataOver && response.size() < 20) { mEntityList.addAll(response); mConcernList = mEntityList; - mLoadConcernDtatOver = true; + mLoadConcernDataOver = true; mIsLoading = false; loadData(mIsSearch, 0); } else { @@ -211,8 +211,8 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter { private void initSearchViewHolder(final LibaoSearchViewHolder viewHolder) { - if (mSerchKey != null) { - viewHolder.searchEt.setText(mSerchKey); + if (mSearchKey != null) { + viewHolder.searchEt.setText(mSearchKey); } if (mIsSearch) { diff --git a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotFragment.java b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotFragment.java index 78ed546f60..0144f40d0b 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsHotFragment.java @@ -10,10 +10,10 @@ import com.gh.common.util.AskLogUtils; import com.gh.common.util.CheckLoginUtils; import com.gh.common.util.EntranceUtils; import com.gh.gamecenter.NormalActivity; -import com.gh.gamecenter.QuestionsDetailActivity; import com.gh.gamecenter.R; 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.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; import com.gh.gamecenter.baselist.LoadType; @@ -71,6 +71,7 @@ public class AskQuestionsHotFragment extends ListFragment startActivity(NewsDetailActivity.getIntentById(getContext(), "5a50a008d53f8b23008b465a", "(折叠答案)"))); // todo } diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java index 65b466a716..0fd4734c4f 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsDetailAdapter.java @@ -3,6 +3,7 @@ package com.gh.gamecenter.ask.questionsdetail; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.Build; +import android.support.annotation.StringRes; import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.text.Spannable; @@ -25,7 +26,6 @@ import com.gh.common.util.ImageUtils; 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.MeEntity; import com.gh.gamecenter.ask.entity.QuestionsDetailEntity; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.LoadStatus; @@ -204,8 +204,8 @@ public class QuestionsDetailAdapter extends ListAdapter { View view = LayoutInflater.from(mContext).inflate(R.layout.questionsdedit_tag_item, null); TextView tagTv = (TextView) view; tagTv.setText(tag); - tagTv.setBackgroundResource(R.drawable.comment_border_bg); - tagTv.setTextColor(ContextCompat.getColor(mContext, R.color.theme)); + tagTv.setBackgroundResource(R.drawable.questions_detail_tag_bg); + tagTv.setTextColor(ContextCompat.getColor(mContext, R.color.hint)); FlexboxLayout.LayoutParams params = new FlexboxLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.setMargins(0, DisplayUtils.dip2px(mContext, 5), DisplayUtils.dip2px(mContext, 15), @@ -214,20 +214,6 @@ public class QuestionsDetailAdapter extends ListAdapter { holder.mTagRl.addView(view); } - if (mQuestionsDetailEntity.getMe().isQuestionFollowed()) { - holder.mConcern.setText(R.string.concerned); - holder.mConcern.setTextColor(ContextCompat.getColor(mContext, R.color.hint)); - } else { - holder.mConcern.setText(R.string.concern_questions); - holder.mConcern.setTextColor(ContextCompat.getColor(mContext, R.color.theme)); - } - - if (mQuestionsDetailEntity.getMe().isQuestionOwn()) { - holder.mConcern.setVisibility(View.GONE); - } else { - holder.mConcern.setVisibility(View.VISIBLE); - } - String description = mQuestionsDetailEntity.getDescription(); if (TextUtils.isEmpty(description)) { holder.mDesRl.setVisibility(View.GONE); @@ -235,8 +221,14 @@ public class QuestionsDetailAdapter extends ListAdapter { holder.mDesRl.setVisibility(View.VISIBLE); holder.mDes.setText(description); } + if (!TextUtils.isEmpty(mQuestionsDetailEntity.getMe().getMyAnswerId())) { + setAnswerTv(holder.answerTv, R.string.question_detail_myanswer); + } else if (mQuestionsDetailEntity.isExistDrafts()) { + setAnswerTv(holder.answerTv, R.string.question_detail_resume_answer); + } else { + setAnswerTv(holder.answerTv, R.string.question_detail_answer); + } - holder.mCommunityName.setText(mQuestionsDetailEntity.getCommunityName()); holder.mTitle.setText(mQuestionsDetailEntity.getTitle()); holder.mAnswercount.setText(mContext.getString(R.string.ask_answer_count, mQuestionsDetailEntity.getAnswersCount())); @@ -287,6 +279,20 @@ public class QuestionsDetailAdapter extends ListAdapter { }); } + private void setAnswerTv(TextView answerTv, @StringRes int answerTvId) { + String answerText = mContext.getString(answerTvId); + answerTv.setText(answerText); + + Drawable drawable; + if (mContext.getString(R.string.question_detail_myanswer).equals(answerText)) { + drawable = ContextCompat.getDrawable(mContext, R.drawable.questionsdetail_myanswer_icon); + } else { + drawable = ContextCompat.getDrawable(mContext, R.drawable.questionsdetail_answer_icon); + } + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + answerTv.setCompoundDrawables(drawable, null, null, null); + } + @Override public int getItemCount() { int index = 0; @@ -307,15 +313,4 @@ public class QuestionsDetailAdapter extends ListAdapter { boolean isOver() { return mIsOver; } - - void onConcern(boolean isSuccess) { - MeEntity me = mQuestionsDetailEntity.getMe(); - me.setQuestionFollowed(isSuccess); - mQuestionsDetailEntity.setMe(me); - notifyItemChanged(0); - } - - boolean isConcernQuestions() { - return mQuestionsDetailEntity.getMe().isQuestionFollowed(); - } } 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 8eae78e5bc..ea21f20553 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 @@ -1,31 +1,40 @@ package com.gh.gamecenter.ask.questionsdetail; +import android.app.Activity; +import android.app.Dialog; import android.arch.lifecycle.Lifecycle; import android.content.Intent; -import android.graphics.drawable.Drawable; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.content.ContextCompat; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; -import android.widget.RelativeLayout; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; import android.widget.TextView; import com.gh.common.util.CheckLoginUtils; import com.gh.common.util.ConcernUtils; +import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; +import com.gh.common.util.ShareUtils; import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.NormalActivity; import com.gh.gamecenter.QuestionsDetailActivity; import com.gh.gamecenter.R; +import com.gh.gamecenter.SuggestionActivity; import com.gh.gamecenter.ViewImageActivity; import com.gh.gamecenter.ask.AnswerDetailFragment; import com.gh.gamecenter.ask.entity.AnswerEntity; import com.gh.gamecenter.ask.entity.QuestionsDetailEntity; +import com.gh.gamecenter.ask.questionsdetail.invite.QuestionsInviteWrapperFragment; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; import com.gh.gamecenter.baselist.LoadStatus; @@ -42,7 +51,6 @@ import java.util.ArrayList; import java.util.List; import butterknife.BindView; -import butterknife.OnClick; import okhttp3.ResponseBody; import retrofit2.HttpException; import rx.Observable; @@ -55,18 +63,10 @@ import rx.schedulers.Schedulers; public class QuestionsDetailFragment extends ListFragment { - @BindView(R.id.questionsdetail_answer) - RelativeLayout mAnswer; - @BindView(R.id.questionsdetail_invite) - RelativeLayout mInvite; - @BindView(R.id.questionsdetail_answer_tv) - TextView mAnswerTv; @BindView(R.id.reuse_tv_none_data) TextView mNoDataTv; - @BindView(R.id.questionsdetail_constraintlayout_bottom) - View mBottomCl; - @BindView(R.id.questionsdetail_line) - View mLine; + + private MenuItem mQuestionConcern; private QuestionsDetailAdapter mAdapter; @@ -97,8 +97,24 @@ public class QuestionsDetailFragment extends ListFragment { - if (mQuestionsDetailEntity != null && !TextUtils.isEmpty(mQuestionsDetailEntity.getMe().getMyAnswerId())) { - Bundle bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_ANSWER_ID, mQuestionsDetailEntity.getMe().getMyAnswerId()); - NormalActivity.startFragmentForResult(getContext(), AnswerDetailFragment.class, bundle - , QuestionsDetailActivity.QUESTIONS_DETAIL_ANSWER_REQUEST); - } else { - ((QuestionsDetailActivity) getActivity()).show(QuestionsDetailActivity.QUESTIONS_DETAIL_ANSWER); - } - }); - - - break; - case R.id.questionsdetail_invite: - if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) - ((QuestionsDetailActivity) getActivity()).show(QuestionsDetailActivity.QUESTIONS_DETAIL_INVITE); - break; - } - } - @Override public Observable> provideDataObservable(int offset) { return RetrofitManager.getInstance(getContext()).getApi().getQuestionsAnswer(mQuestionsId, false, offset); @@ -195,39 +186,6 @@ public class QuestionsDetailFragment extends ListFragment { - if (!mAdapter.isConcernQuestions()) { - ConcernUtils.INSTANCE.postConcernQuestions(getContext(), mQuestionsId - , new ConcernUtils.onConcernListener() { - @Override - public void onSuccess() { - mAdapter.onConcern(true); - toast("关注成功"); - } - - @Override - public void onError() { - - } - }); - } else { - ConcernUtils.INSTANCE.deleteConcernQuestions(getContext(), mQuestionsId - , new ConcernUtils.onConcernListener() { - @Override - public void onSuccess() { - mAdapter.onConcern(false); - toast("取消关注"); - } - - @Override - public void onError() { - - } - }); - } - }); - break; case R.id.questionsdetail_item_pic1: imgPosition = 0; case R.id.questionsdetail_item_pic2: @@ -240,10 +198,131 @@ public class QuestionsDetailFragment extends ListFragment { + if (mQuestionsDetailEntity != null && !TextUtils.isEmpty(mQuestionsDetailEntity.getMe().getMyAnswerId())) { + Bundle answerDetailBundle = new Bundle(); + answerDetailBundle.putString(EntranceUtils.KEY_ANSWER_ID, mQuestionsDetailEntity.getMe().getMyAnswerId()); + NormalActivity.startFragmentForResult(getContext(), AnswerDetailFragment.class, answerDetailBundle + , QuestionsDetailActivity.QUESTIONS_DETAIL_ANSWER_REQUEST); + } else { + Bundle answerEditBundle = new Bundle(); + answerEditBundle.putString(EntranceUtils.KEY_QUESTIONS_ID, mQuestionsId); + answerEditBundle.putString(EntranceUtils.KEY_QUESTIONS_TITLE, getQuestionsTitle()); + NormalActivity.startFragmentForResult(getActivity(), AnswerEditFragment.class, answerEditBundle + , QuestionsDetailActivity.QUESTIONS_DETAIL_ANSWER_REQUEST); + } + }); + break; + case R.id.questionsdetail_invite: + Bundle bundleInvite = new Bundle(); + bundleInvite.putParcelable(QuestionsDetailEntity.TAG, mQuestionsDetailEntity); + NormalActivity.startFragment(getContext(), QuestionsInviteWrapperFragment.class, bundleInvite); + break; } } + + @Override + public void onMenuItemClick(MenuItem menuItem) { + switch (menuItem.getItemId()) { + case R.id.menu_more: + showMoreItemDialog(); + break; + case R.id.menu_question_concern: + CheckLoginUtils.checkLogin(getContext(), () -> { + if (!mQuestionsDetailEntity.getMe().isQuestionFollowed()) { + ConcernUtils.INSTANCE.postConcernQuestions(getContext(), mQuestionsId + , new ConcernUtils.onConcernListener() { + @Override + public void onSuccess() { + mQuestionsDetailEntity.getMe().setQuestionFollowed(true); + mQuestionConcern.setIcon(R.drawable.menu_ic_question_concern_select); + toast("已关注 "); + } + + @Override + public void onError() { + + } + }); + } else { + ConcernUtils.INSTANCE.deleteConcernQuestions(getContext(), mQuestionsId + , new ConcernUtils.onConcernListener() { + @Override + public void onSuccess() { + mQuestionsDetailEntity.getMe().setQuestionFollowed(false); + mQuestionConcern.setIcon(R.drawable.menu_ic_question_concern_unselect); + toast("取消关注"); + } + + @Override + public void onError() { + + } + }); + } + }); + break; + } + } + + private void showMoreItemDialog() { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED) || mQuestionsDetailEntity != null) { + View view = LayoutInflater.from(getContext()).inflate(R.layout.menu_question_detail_more_item, null); + Dialog dialog = new Dialog(getActivity()); + dialog.setContentView(view); + Window window = dialog.getWindow(); + if (window != null) { + window.setGravity(Gravity.RIGHT | Gravity.TOP); + window.setBackgroundDrawable(new ColorDrawable(0)); + window.setDimAmount(0.2f); + WindowManager.LayoutParams lp = window.getAttributes(); + lp.x = DisplayUtils.dip2px(getContext(), 20); + lp.y = DisplayUtils.dip2px(getContext(), 50); + window.setAttributes(lp); + } + dialog.show(); + ImageView icon = view.findViewById(R.id.more_item_icon1); + TextView title = view.findViewById(R.id.more_item_title1); + if (mQuestionsDetailEntity.getMe().isQuestionOwn()) { + icon.setImageResource(R.drawable.menu_more_edit); + title.setText("编辑"); + } + View item1 = view.findViewById(R.id.more_item1); + View item2 = view.findViewById(R.id.more_item2); + item1.setOnClickListener(v -> { + dialog.dismiss(); + if ("编辑".equals(title.getText().toString())) { + // 跳转编辑问题页面 + } else { + // 跳转意见反馈 + SuggestionActivity.startSuggestionActivity(getContext(), 1, "report", "问题举报:"); + } + }); + item2.setOnClickListener(v -> { + dialog.dismiss(); + String shareIcon; + if (mQuestionsDetailEntity.getImages().size() > 0) { + shareIcon = mQuestionsDetailEntity.getImages().get(0); + } else { + shareIcon = getString(R.string.share_ghzs_logo); + } + String description = mQuestionsDetailEntity.getDescription(); + if (TextUtils.isEmpty(description)) { + description = getString(R.string.ask_share_default_summary); + } + ShareUtils.getInstance(getActivity()).showShareWindows(getActivity(), view + , getString(R.string.share_questions_url, mQuestionsDetailEntity.getId()) + , shareIcon + , getString(R.string.ask_share_questions_title, mQuestionsDetailEntity.getTitle(), mQuestionsDetailEntity.getAnswersCount()) + , description, ShareUtils.ShareType.askNormal); + }); + } + } + public String getQuestionsTitle() { return mAdapter.getQuestionsTitle(); } @@ -253,11 +332,12 @@ public class QuestionsDetailFragment extends ListFragment { mListClickListener = listClickListener; } - protected void provideListData(List listData) { + protected void setListData(List listData) { if (listData != null && listData.size() != 0) { - mEntityList.addAll(listData); - notifyItemRangeInserted(mEntityList.size() - listData.size() + TOP_ITEM_COUNT, listData.size()); + mEntityList = new ArrayList<>(listData); + notifyDataSetChanged(); +// notifyItemRangeInserted(mEntityList.size() - listData.size() + TOP_ITEM_COUNT, listData.size()); } } @Override public int getItemViewType(int position) { - if (position == 0) { - return ItemViewType.ITEM_TOP; - } else if (position == getItemCount() - 1) { + if (position == getItemCount() - 1) { return ItemViewType.ITEM_FOOTER; } else { return ItemViewType.ITEM_BODY; @@ -50,9 +50,6 @@ public class QuestionsInviteAdapter extends ListAdapter { public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; switch (viewType) { - case ItemViewType.ITEM_TOP: - view = mLayoutInflater.inflate(R.layout.questionsinvite_top_item, parent, false); - return new QuestionsInviteTopItemViewHolder(view, null, mListClickListener); case ItemViewType.ITEM_FOOTER: view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); return new FooterViewHolder(view, null, mListClickListener); @@ -67,22 +64,20 @@ public class QuestionsInviteAdapter extends ListAdapter { @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { switch (getItemViewType(position)) { - case ItemViewType.ITEM_TOP: - 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: - ((QuestionsInviteViewHolder) holder).initQuestionsInviteViewHolder(mContext, mEntityList.get(position - 1)); + ((QuestionsInviteViewHolder) holder).initQuestionsInviteViewHolder(mContext, mEntityList.get(position)); break; } } @Override public int getItemCount() { - return mEntityList.size() != 0 ? mEntityList.size() + TOP_ITEM_COUNT + FOOTER_ITEM_COUNT : 0; + return mEntityList != null && mEntityList.size() != 0 ? mEntityList.size() + FOOTER_ITEM_COUNT : 0; } public void inviteSuccess(String id) { diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsInviteFragment.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteFragment.java similarity index 70% rename from app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsInviteFragment.java rename to app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteFragment.java index f828272b97..feee35b4d8 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsInviteFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteFragment.java @@ -1,21 +1,24 @@ -package com.gh.gamecenter.ask.questionsdetail; +package com.gh.gamecenter.ask.questionsdetail.invite; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.View; import com.gh.common.util.AskErrorResponseUtils; import com.gh.common.util.CheckLoginUtils; -import com.gh.common.util.ShareUtils; +import com.gh.common.util.EntranceUtils; +import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.R; import com.gh.gamecenter.ask.entity.InviteEntity; import com.gh.gamecenter.ask.entity.MeEntity; import com.gh.gamecenter.ask.entity.QuestionsDetailEntity; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.baselist.LoadType; import com.gh.gamecenter.baselist.NormalListViewModel; -import com.gh.gamecenter.manager.UserManager; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; @@ -42,6 +45,8 @@ public class QuestionsInviteFragment extends ListFragment> provideDataObservable(int offset) { - return RetrofitManager.getInstance(getContext()).getApi().getInviteExperts(mQuestionsDetailEntity.getId(), offset); + return RetrofitManager.getInstance(getContext()).getApi().getInviteExperts(mQuestionsDetailEntity.getId() + , TextUtils.isEmpty(mSearchKey) ? offset : offset + 10); } @Override @@ -85,31 +99,14 @@ public class QuestionsInviteFragment extends ListFragment 0) { - shreIcon = mQuestionsDetailEntity.getImages().get(0); - } else { - shreIcon = getString(R.string.share_ghzs_logo); - } - String userName; - if (UserManager.getInstance().getUserInfoEntity() != null) { - userName = UserManager.getInstance().getUserInfoEntity().getName(); - } else { - userName = "我"; - } + } + } - String description = mQuestionsDetailEntity.getDescription(); - if (TextUtils.isEmpty(description)) { - description = getString(R.string.ask_share_default_summary); - } - ShareUtils.getInstance(getContext()).showShareWindows(getActivity(), view - , getString(R.string.share_invite_url, mQuestionsDetailEntity.getId(), UserManager.getInstance().getUserId()) - , shreIcon, getString(R.string.ask_share_invite_title, userName, mQuestionsDetailEntity.getTitle()) - , description, ShareUtils.ShareType.askInvite); - - break; + public void search() { + Fragment parentFragment = getParentFragment(); + if (parentFragment instanceof QuestionsInviteWrapperFragment) { + mSearchKey = ((QuestionsInviteWrapperFragment) parentFragment).getSearchKey(); + mListViewModel.load(LoadType.REFRESH); } } diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsInviteTopItemViewHolder.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteTopItemViewHolder.java similarity index 91% rename from app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsInviteTopItemViewHolder.java rename to app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteTopItemViewHolder.java index 624a9a18ed..c52cc9e62b 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsInviteTopItemViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteTopItemViewHolder.java @@ -1,4 +1,4 @@ -package com.gh.gamecenter.ask.questionsdetail; +package com.gh.gamecenter.ask.questionsdetail.invite; import android.view.View; import android.widget.TextView; diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsInviteViewHolder.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteViewHolder.java similarity index 97% rename from app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsInviteViewHolder.java rename to app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteViewHolder.java index 7db2fbb05f..833452d26e 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/QuestionsInviteViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteViewHolder.java @@ -1,4 +1,4 @@ -package com.gh.gamecenter.ask.questionsdetail; +package com.gh.gamecenter.ask.questionsdetail.invite; import android.content.Context; import android.support.v4.content.ContextCompat; diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteWrapperFragment.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteWrapperFragment.java new file mode 100644 index 0000000000..f9f8f24152 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteWrapperFragment.java @@ -0,0 +1,176 @@ +package com.gh.gamecenter.ask.questionsdetail.invite; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.design.widget.AppBarLayout; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; +import android.text.TextUtils; +import android.view.MenuItem; +import android.view.View; +import android.view.inputmethod.EditorInfo; +import android.widget.EditText; +import android.widget.TextView; + +import com.gh.common.util.EntranceUtils; +import com.gh.common.util.ShareUtils; +import com.gh.gamecenter.R; +import com.gh.gamecenter.ask.entity.QuestionsDetailEntity; +import com.gh.gamecenter.manager.UserManager; +import com.gh.gamecenter.normal.NormalFragment; +import com.lightgame.utils.Util_System_Keyboard; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * Created by khy on 22/03/18. + */ + +public class QuestionsInviteWrapperFragment extends NormalFragment { + + @BindView(R.id.invite_appbar) + AppBarLayout mAppBar; + @BindView(R.id.invite_et_search) + EditText mInviteEtSearch; + @BindView(R.id.invite_tv_back) + TextView mInviteTvBack; + @BindView(R.id.invite_tv_search) + TextView mInviteTvSearch; + + private final static String INVITE_SEARCH_TAG = "INVITE_SEARCH_TAG"; + private final static String INVITE_NORMAL_TAG = "INVITE_NORMAL_TAG"; + + private QuestionsDetailEntity mQuestionsDetailEntity; + + private boolean mIsSearch; + + @Override + protected int getLayoutId() { + return R.layout.fragment_invite; + } + + @Override + public void onMenuItemClick(MenuItem menuItem) { + if (menuItem.getItemId() == R.id.menu_answer_post) { + // 第三方邀请(QQ/微信/微博) + String shareIcon; + if (mQuestionsDetailEntity.getImages().size() > 0) { + shareIcon = mQuestionsDetailEntity.getImages().get(0); + } else { + shareIcon = getString(R.string.share_ghzs_logo); + } + String userName; + if (UserManager.getInstance().getUserInfoEntity() != null) { + userName = UserManager.getInstance().getUserInfoEntity().getName(); + } else { + userName = "我"; + } + + String description = mQuestionsDetailEntity.getDescription(); + if (TextUtils.isEmpty(description)) { + description = getString(R.string.ask_share_default_summary); + } + ShareUtils.getInstance(getContext()).showShareWindows(getActivity(), new View(getContext()) + , getString(R.string.share_invite_url, mQuestionsDetailEntity.getId(), UserManager.getInstance().getUserId()) + , shareIcon, getString(R.string.ask_share_invite_title, userName, mQuestionsDetailEntity.getTitle()) + , description, ShareUtils.ShareType.askInvite); + } + } + + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setNavigationTitle("达人推荐"); + initMenu(R.menu.menu_question_invite); + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) + mQuestionsDetailEntity = getArguments().getParcelable(QuestionsDetailEntity.TAG); + changeFragment(); + + mAppBar.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> { + int totalScrollRange = appBarLayout.getTotalScrollRange(); + if (totalScrollRange == -verticalOffset) { + Util_System_Keyboard.hideSoftKeyboard(getActivity()); + } + }); + + mInviteEtSearch.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_SEARCH) { + mInviteTvSearch.performClick(); + } + return false; + }); + } + + private void changeFragment() { + FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); + hideFragments(transaction); + if (mIsSearch) { + alterFragment(transaction, QuestionsInviteFragment.class, INVITE_SEARCH_TAG); + } else { + alterFragment(transaction, QuestionsInviteFragment.class, INVITE_NORMAL_TAG); + } + + transaction.commitAllowingStateLoss(); + } + + private T alterFragment(FragmentTransaction transaction, Class cls, String tag) { + T fragmentByTag = (T) getChildFragmentManager().findFragmentByTag(tag); + try { + if (fragmentByTag != null) { + transaction.show(fragmentByTag); + if (fragmentByTag instanceof QuestionsInviteFragment && INVITE_SEARCH_TAG.equals(tag)) { + ((QuestionsInviteFragment) fragmentByTag).search(); + } + } else { + Bundle args = new Bundle(); + if (INVITE_SEARCH_TAG.equals(tag)) + args.putString(EntranceUtils.KEY_INVITE_SEARCH_KEY, getSearchKey()); + args.putParcelable(QuestionsDetailEntity.TAG, mQuestionsDetailEntity); + fragmentByTag = cls.newInstance(); + fragmentByTag.setArguments(args); + transaction.add(R.id.layout_fragment_content, fragmentByTag, tag); + + } + } catch (Exception e) { + e.printStackTrace(); + } + return fragmentByTag; + } + + @OnClick({R.id.invite_tv_back, R.id.invite_tv_search}) + public void onViewClicked(View view) { + switch (view.getId()) { + case R.id.invite_tv_back: + mIsSearch = false; + break; + case R.id.invite_tv_search: + String key = mInviteEtSearch.getText().toString(); + if (TextUtils.isEmpty(key)) { + toast(R.string.search_hint); + return; + } else if (!mIsSearch) { + mIsSearch = true; + } + break; + } + if (mIsSearch) { + mInviteTvBack.setVisibility(View.VISIBLE); + } else { + mInviteTvBack.setVisibility(View.GONE); + } + Util_System_Keyboard.hideSoftKeyboard(getActivity()); + changeFragment(); + } + + public String getSearchKey() { + return mInviteEtSearch.getText().toString(); + } + +} diff --git a/app/src/main/res/drawable-xhdpi/menu_ic_more.png b/app/src/main/res/drawable-xhdpi/menu_ic_more.png new file mode 100644 index 0000000000..9f51a5056f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_ic_more.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_ic_question_concern_select.png b/app/src/main/res/drawable-xhdpi/menu_ic_question_concern_select.png new file mode 100644 index 0000000000..b69b1b380e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_ic_question_concern_select.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_ic_question_concern_unselect.png b/app/src/main/res/drawable-xhdpi/menu_ic_question_concern_unselect.png new file mode 100644 index 0000000000..ecd4b075e2 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_ic_question_concern_unselect.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_more_edit.png b/app/src/main/res/drawable-xhdpi/menu_more_edit.png new file mode 100644 index 0000000000..73af069c67 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_more_edit.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_more_report.png b/app/src/main/res/drawable-xhdpi/menu_more_report.png new file mode 100644 index 0000000000..1c6d103769 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_more_report.png differ diff --git a/app/src/main/res/drawable-xhdpi/menu_more_share.png b/app/src/main/res/drawable-xhdpi/menu_more_share.png new file mode 100644 index 0000000000..fb03309a76 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/menu_more_share.png differ diff --git a/app/src/main/res/drawable/questions_detail_tag_bg.xml b/app/src/main/res/drawable/questions_detail_tag_bg.xml new file mode 100644 index 0000000000..8348f921d5 --- /dev/null +++ b/app/src/main/res/drawable/questions_detail_tag_bg.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_invite.xml b/app/src/main/res/layout/fragment_invite.xml new file mode 100644 index 0000000000..4cb76af79d --- /dev/null +++ b/app/src/main/res/layout/fragment_invite.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_menu_question_invite.xml b/app/src/main/res/layout/layout_menu_question_invite.xml new file mode 100644 index 0000000000..5356586243 --- /dev/null +++ b/app/src/main/res/layout/layout_menu_question_invite.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/app/src/main/res/layout/menu_question_detail_more_item.xml b/app/src/main/res/layout/menu_question_detail_more_item.xml new file mode 100644 index 0000000000..e6838f1dce --- /dev/null +++ b/app/src/main/res/layout/menu_question_detail_more_item.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/questionsdetail_item.xml b/app/src/main/res/layout/questionsdetail_item.xml index aeb20daefc..a16aa0c2a6 100644 --- a/app/src/main/res/layout/questionsdetail_item.xml +++ b/app/src/main/res/layout/questionsdetail_item.xml @@ -5,21 +5,22 @@ android:layout_width = "match_parent" android:layout_height = "wrap_content" android:background = "@drawable/reuse_listview_item_style" - android:paddingBottom = "9dp" - android:paddingLeft = "20dp" - android:paddingRight = "20dp" android:paddingTop = "10dp" > @@ -54,11 +57,12 @@ android:visibility = "gone" /> - @@ -83,36 +87,78 @@ android:layout_weight = "1" /> + + + + + + + + + + + + + + + - - - - + android:background = "@color/background" + android:gravity = "center_vertical" + android:paddingBottom = "2dp" + android:paddingLeft = "20dp" + android:paddingTop = "10dp" + android:textColor = "@color/title" + android:textSize = "11sp" + app:layout_constraintTop_toBottomOf = "@+id/questionsdetail_invite" /> \ No newline at end of file diff --git a/app/src/main/res/menu/menu_question_invite.xml b/app/src/main/res/menu/menu_question_invite.xml new file mode 100644 index 0000000000..6fdaaba320 --- /dev/null +++ b/app/src/main/res/menu/menu_question_invite.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_questions_detail.xml b/app/src/main/res/menu/menu_questions_detail.xml new file mode 100644 index 0000000000..8b3848dbd5 --- /dev/null +++ b/app/src/main/res/menu/menu_questions_detail.xml @@ -0,0 +1,22 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 2a1a23917a..2793f9531a 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -49,10 +49,10 @@ - +