From 38bf17c9325e7d4d4d0adcd99fc42fd7d435b160 Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Thu, 22 Mar 2018 16:31:02 +0800 Subject: [PATCH] =?UTF-8?q?=E9=97=AE=E9=A2=98=E8=AF=A6=E6=83=85=E4=B8=8E?= =?UTF-8?q?=E9=82=80=E8=AF=B7=E5=9B=9E=E7=AD=94=E4=BC=98=E5=8C=96(?= =?UTF-8?q?=E5=AE=8C=E6=88=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gh/common/util/EntranceUtils.java | 1 + .../java/com/gh/common/util/ShareUtils.java | 9 +- .../gamecenter/QuestionsDetailActivity.java | 11 +- .../com/gh/gamecenter/ToolBoxActivity.java | 8 +- .../gamecenter/adapter/ToolBoxRvAdapter.java | 22 +- .../ask/AskQuestionsHotFragment.java | 11 +- .../ask/entity/QuestionsDetailEntity.kt | 4 + .../questionsdetail/AnswerFoldFragment.java | 7 +- .../QuestionsDetailAdapter.java | 53 ++-- .../QuestionsDetailFragment.java | 264 +++++++++++------- .../QuestionsDetailItemViewHolder.java | 13 +- .../{ => invite}/QuestionsInviteAdapter.java | 23 +- .../{ => invite}/QuestionsInviteFragment.java | 57 ++-- .../QuestionsInviteTopItemViewHolder.java | 2 +- .../QuestionsInviteViewHolder.java | 2 +- .../QuestionsInviteWrapperFragment.java | 176 ++++++++++++ .../main/res/drawable-xhdpi/menu_ic_more.png | Bin 0 -> 334 bytes .../menu_ic_question_concern_select.png | Bin 0 -> 1496 bytes .../menu_ic_question_concern_unselect.png | Bin 0 -> 1737 bytes .../res/drawable-xhdpi/menu_more_edit.png | Bin 0 -> 880 bytes .../res/drawable-xhdpi/menu_more_report.png | Bin 0 -> 1050 bytes .../res/drawable-xhdpi/menu_more_share.png | Bin 0 -> 991 bytes .../res/drawable/questions_detail_tag_bg.xml | 9 + app/src/main/res/layout/fragment_invite.xml | 76 +++++ .../layout/layout_menu_question_invite.xml | 17 ++ .../layout/menu_question_detail_more_item.xml | 71 +++++ .../main/res/layout/questionsdetail_item.xml | 110 +++++--- .../main/res/menu/menu_question_invite.xml | 11 + .../main/res/menu/menu_questions_detail.xml | 22 ++ app/src/main/res/values/styles.xml | 8 +- 30 files changed, 747 insertions(+), 240 deletions(-) rename app/src/main/java/com/gh/gamecenter/ask/questionsdetail/{ => invite}/QuestionsInviteAdapter.java (76%) rename app/src/main/java/com/gh/gamecenter/ask/questionsdetail/{ => invite}/QuestionsInviteFragment.java (70%) rename app/src/main/java/com/gh/gamecenter/ask/questionsdetail/{ => invite}/QuestionsInviteTopItemViewHolder.java (91%) rename app/src/main/java/com/gh/gamecenter/ask/questionsdetail/{ => invite}/QuestionsInviteViewHolder.java (97%) create mode 100644 app/src/main/java/com/gh/gamecenter/ask/questionsdetail/invite/QuestionsInviteWrapperFragment.java create mode 100644 app/src/main/res/drawable-xhdpi/menu_ic_more.png create mode 100644 app/src/main/res/drawable-xhdpi/menu_ic_question_concern_select.png create mode 100644 app/src/main/res/drawable-xhdpi/menu_ic_question_concern_unselect.png create mode 100644 app/src/main/res/drawable-xhdpi/menu_more_edit.png create mode 100644 app/src/main/res/drawable-xhdpi/menu_more_report.png create mode 100644 app/src/main/res/drawable-xhdpi/menu_more_share.png create mode 100644 app/src/main/res/drawable/questions_detail_tag_bg.xml create mode 100644 app/src/main/res/layout/fragment_invite.xml create mode 100644 app/src/main/res/layout/layout_menu_question_invite.xml create mode 100644 app/src/main/res/layout/menu_question_detail_more_item.xml create mode 100644 app/src/main/res/menu/menu_question_invite.xml create mode 100644 app/src/main/res/menu/menu_questions_detail.xml 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 0000000000000000000000000000000000000000..9f51a5056f054c7c70b35bcbac33754bb482ac18 GIT binary patch literal 334 zcmV-U0kQsxP)7#M7>6j=-=i!8b$ z2KklC@HKtAj`CTap7S~H^PJA}Jf$>Ep&#q$#RGP*jCZj*v4K(4aD+MB|G_n371LJ33VUVTyXeQbW01uHqQoXhjv9m=|B!8}`tKc0B*=r|=kXu#W^? gKWhb(S(aUY1A0k2+Dy6U7ytkO07*qoM6N<$g3#xWa{vGU literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b69b1b380efc97256e7db434b512f13dfa085bb3 GIT binary patch literal 1496 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 U!Gzfnz5oCK07*qoM6N<$f(!i%r~m)} literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..fb03309a7652420db07fd1ee80f5db8dcf1df4c6 GIT binary patch literal 991 zcmV<510ei~P)u!nHBg}@hs$h}cm21c$A!9JMTCTi?8f*zwRgw2T7pa>-T_tKNZ zWF)a+E@TB^qM+47Y7kMd8ymK}NVJ7zM6~rV^W*pH$Gz9xwf%kJGBan+xxeq6nK@@> zItB&?REWE=3+u29Q#gzlLI|T!tB}kPK1E+511s<_zG^fYeb7;nhqmIKR3FDHsa%6c zu@o1u`m!q6;Q3U3El$^TY9GYAIG#xDu42k=#L85EvOore5KiIs)aw9v`q=c^#J6o04s5ITyTjYeZR9#75Vvmw+`{*zhadc2KeSd?VC~H$*@AEI9InFe*e&j~HR6>0TCy3#wh+P){|$_N7)~RElNd<` z#I3s#Yg79V^oyatj#qJ4;X`j>Q1omOi*Ylq#$*WL+hS)H80!Tx6BxjeCLVYZz3F3J zcn=?7vwWR>j>l5j41b9pZi-s^y;&f0dkZodjwGF*a3$_fWG2uMJ=luOMNt!{p(nKm zaCR1UXVb?s3}cn(xqs$MCL`3J>L<1LOc@`Fxe5NnZjmrQ5|4~e;{ON_GZJhdU|Tr0+( zEDhX&&%~%d?_HPeveROK%t(DAj(AYa;9FAtMC$8Gx|?yExR!npr)`IL^mqzaH2LOY z+$zSdRprj|HK?9O*i%+4;f(0j(*@ZQ@e(*FKQVldC-6QlPb7EZnu6UJo(>@#Xhw)U zzxAh4WbU67chj)A?q*t$?Z#gD4uqqkx7Ic@NZ1oX7+T1S;+=R+oSq^Mi3hdpqWF^h z)VO{jBXzdx9+95_4&gp=s;BX>cySz0{ks-Abss92V2qBDC{ere$yvLnSvMKDt>JY+V_!suy*C=5oU~m8c N002ovPDHLkV1j^A+~EKK literal 0 HcmV?d00001 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 @@ - +