From 926b2d070fcd00da51cc5e303e6e222b8a219857 Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Fri, 29 Dec 2017 18:24:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9C=89=E8=8D=89=E7=A8=BF?= =?UTF-8?q?=E7=AE=B1=E8=BF=9B=E5=8E=BB=E5=9B=9E=E7=AD=94=E7=AD=94=E6=A1=88?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E5=90=8E=E6=97=A0=E6=B3=95=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gh/base/fragment/BaseFragment.java | 3 +- .../com/gh/common/util/TimestampUtils.java | 50 +++++++-------- .../gamecenter/ask/myask/MyDraftAdapter.java | 5 ++ .../gamecenter/ask/myask/MyDraftFragment.java | 3 +- .../questionsdetail/AnswerEditFragment.java | 63 +++++++++---------- .../QuestionsDetailFragment.java | 59 +++++++++++++++-- .../gh/gamecenter/baselist/ListFragment.java | 17 +++-- .../message/MessageItemVieHolder.java | 5 ++ .../main/res/layout/message_item_answer.xml | 1 + app/src/main/res/values/strings.xml | 2 + 10 files changed, 131 insertions(+), 77 deletions(-) diff --git a/app/src/main/java/com/gh/base/fragment/BaseFragment.java b/app/src/main/java/com/gh/base/fragment/BaseFragment.java index 7388b8e67b..9aa61f71df 100644 --- a/app/src/main/java/com/gh/base/fragment/BaseFragment.java +++ b/app/src/main/java/com/gh/base/fragment/BaseFragment.java @@ -164,7 +164,8 @@ public abstract class BaseFragment extends Fragment implements OnRequestCallB } public void toast(String msg) { - Utils.toast(getContext(), msg); + if (getContext() != null) + Utils.toast(getContext(), msg); } public void toastLong(@StringRes int msg) { diff --git a/app/src/main/java/com/gh/common/util/TimestampUtils.java b/app/src/main/java/com/gh/common/util/TimestampUtils.java index f4e744f5ad..0be025a2a7 100644 --- a/app/src/main/java/com/gh/common/util/TimestampUtils.java +++ b/app/src/main/java/com/gh/common/util/TimestampUtils.java @@ -103,39 +103,39 @@ public class TimestampUtils { public static String addTimestamp(String url) { // TODO: 22/12/17 刷新版 -// if (TextUtils.isEmpty(url)) { -// return url; -// } -// if (url.contains("?")) { -// String u = url + "×tamp=" + System.currentTimeMillis(); -// return u; -// } else { -// String u = url + "?timestamp=" + System.currentTimeMillis(); -// return u; -// } - if (TextUtils.isEmpty(url)) { return url; } - int cd = 0; - for (String key : getCdMap().keySet()) { - if (Pattern.matches(key, url)) { - cd = getCdMap().get(key); - break; - } - } - if (cd == 0) { - return url; - } if (url.contains("?")) { - String u = url + "×tamp=" + getTimestamp(url, cd); -// Utils.log("url = " + u); + String u = url + "×tamp=" + System.currentTimeMillis(); return u; } else { - String u = url + "?timestamp=" + getTimestamp(url, cd); -// Utils.log("url = " + u); + String u = url + "?timestamp=" + System.currentTimeMillis(); return u; } + +// if (TextUtils.isEmpty(url)) { +// return url; +// } +// int cd = 0; +// for (String key : getCdMap().keySet()) { +// if (Pattern.matches(key, url)) { +// cd = getCdMap().get(key); +// break; +// } +// } +// if (cd == 0) { +// return url; +// } +// if (url.contains("?")) { +// String u = url + "×tamp=" + getTimestamp(url, cd); +//// Utils.log("url = " + u); +// return u; +// } else { +// String u = url + "?timestamp=" + getTimestamp(url, cd); +//// Utils.log("url = " + u); +// return u; +// } } private static ArrayMap getCdMap() { diff --git a/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftAdapter.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftAdapter.java index f3621a2223..b42c70f29d 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftAdapter.java @@ -98,4 +98,9 @@ class MyDraftAdapter extends ListAdapter { answerEntity.setBrief(newContent); notifyItemChanged(position); } + + void removePosition(int draftPosition) { + mEntityList.remove(draftPosition); + notifyDataSetChanged(); + } } diff --git a/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftFragment.java b/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftFragment.java index f9871cae56..812b032651 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/myask/MyDraftFragment.java @@ -38,8 +38,9 @@ public class MyDraftFragment extends ListFragment { super.onActivityResult(requestCode, resultCode, data); if (requestCode == ANSWER_DRAFT_REQUEST && mDraftPosition != -1) { if (resultCode == Activity.RESULT_OK) { - mAdapter.notifyItemRemoved(mDraftPosition); + mAdapter.removePosition(mDraftPosition); mDraftPosition = -1; + if (mAdapter.getItemCount() == 0) onLoadEmpty(); } else if (resultCode == Activity.RESULT_CANCELED && data != null) { mAdapter.answerContentChange(mDraftPosition, data.getStringExtra(EntranceUtils.KEY_ANSWER_CONTENT)); } diff --git a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerEditFragment.java b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerEditFragment.java index c9440d589b..9c16daa1c1 100644 --- a/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerEditFragment.java +++ b/app/src/main/java/com/gh/gamecenter/ask/questionsdetail/AnswerEditFragment.java @@ -53,6 +53,7 @@ import rx.schedulers.Schedulers; */ public class AnswerEditFragment extends NormalFragment { + @BindView(R.id.answer_edit_title) TextView mTitle; @BindView(R.id.answer_edit_content) @@ -66,7 +67,7 @@ public class AnswerEditFragment extends NormalFragment { private WaitingDialogFragment postDialog; - private String mAnswerId; + private String mAnswerId; // 以mAnswerId为标识,如果mAnswerId不为空则是-修改答案(不需要保存草稿) 为空则是-编写答案 private String mAnswerContent; private String mQuestionsId; @@ -74,31 +75,12 @@ public class AnswerEditFragment extends NormalFragment { private String mCacheAnswerContent; -// public static AnswerEditFragment getInstance(String questionsId, String questionsTitle) { -// AnswerEditFragment fragment = new AnswerEditFragment(); -// Bundle args = new Bundle(); -// args.putString(EntranceUtils.KEY_QUESTIONS_ID, questionsId); -// args.putString(EntranceUtils.KEY_QUESTIONS_TITLE, questionsTitle); -// fragment.setArguments(args); -// return fragment; -// } - -// public static AnswerEditFragment getInstanceByPatch(String mAnswerId, String questionsTitle, String content) { -// AnswerEditFragment fragment = new AnswerEditFragment(); -// Bundle args = new Bundle(); -// args.putString(EntranceUtils.KEY_ANSWER_ID, mAnswerId); -// args.putString(EntranceUtils.KEY_QUESTIONS_TITLE, questionsTitle); -// args.putString(EntranceUtils.KEY_ANSWER_CONTENT, content); -// fragment.setArguments(args); -// return fragment; -// } - @Override protected void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 1) { saveAnswerDrafts(false); - mBaseHandler.sendEmptyMessageDelayed(1, 10000); + mBaseHandler.sendEmptyMessageDelayed(1, 30000); } } @@ -140,7 +122,9 @@ public class AnswerEditFragment extends NormalFragment { mAnswerContent = arguments.getString(EntranceUtils.KEY_ANSWER_CONTENT); mQuestionsId = arguments.getString(EntranceUtils.KEY_QUESTIONS_ID); mQuestionsTitle = arguments.getString(EntranceUtils.KEY_QUESTIONS_TITLE); - mBaseHandler.sendEmptyMessageDelayed(1, 10000); // 启动自动保持 + if (TextUtils.isEmpty(mAnswerId)) { + mBaseHandler.sendEmptyMessageDelayed(1, 30000); // 启动自动保持 + } } } @@ -152,7 +136,6 @@ public class AnswerEditFragment extends NormalFragment { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - setNavigationTitle(R.string.answer_detail_title); initMenu(R.menu.menu_answer_post); mTitle.setText(mQuestionsTitle); @@ -160,9 +143,10 @@ public class AnswerEditFragment extends NormalFragment { mEditContent.setPlaceholder(getString(R.string.answer_placeholder)); if (!TextUtils.isEmpty(mAnswerId)) { + setNavigationTitle(getString(R.string.answer_patch_title)); mEditContent.setHtml(mAnswerContent); - mCacheAnswerContent = mAnswerContent; } else { + setNavigationTitle(getString(R.string.answer_edit_title)); getUserAnswerDrafts(); } } @@ -183,7 +167,7 @@ public class AnswerEditFragment extends NormalFragment { @Override public void postSuccess(@NotNull HashMap imgMap) { if (imgMap.size() != mImgArr.size()) { - toast("有部分图片提交失败"); + Utils.log("有部分图片提交失败"); } String answerContent = mEditContent.getHtml(); for (String s : imgMap.keySet()) { @@ -227,11 +211,9 @@ public class AnswerEditFragment extends NormalFragment { postDialog.dismissAllowingStateLoss(); toast("提交成功"); if (getActivity() != null) { - if (!TextUtils.isEmpty(mAnswerId)) { - Intent data = new Intent(); - data.putExtra(EntranceUtils.KEY_ANSWER_CONTENT, editContent); - getActivity().setResult(Activity.RESULT_OK, data); - } + Intent data = new Intent(); + data.putExtra(EntranceUtils.KEY_ANSWER_CONTENT, editContent); + getActivity().setResult(Activity.RESULT_OK, data); getActivity().finish(); } } @@ -249,15 +231,28 @@ public class AnswerEditFragment extends NormalFragment { @Override public boolean onBackPressed() { - if (TextUtils.isEmpty(mEditContent.getHtml())) { + if (!TextUtils.isEmpty(mAnswerId)) { + showPacthBackDialog(); + return true; + } else if (TextUtils.isEmpty(mEditContent.getHtml())) { return false; } else { - showBackDialog(); + showEditBackDialog(); return true; } } - private void showBackDialog() { + private void showPacthBackDialog() { + DialogUtils.showAlertDialog(getActivity(), "提示", "确定放弃修改?已修改的内容将丢失" + , "继续写", " 确定", null, new DialogUtils.CancelListener() { + @Override + public void onCancel() { + if (getActivity() != null) getActivity().finish(); + } + }); + } + + private void showEditBackDialog() { DialogUtils.showAlertDialog(getActivity(), "提示", "确定要退出吗?退出后答案将保存到草稿箱" , "继续写", " 退出", null, new DialogUtils.CancelListener() { @Override @@ -272,7 +267,7 @@ public class AnswerEditFragment extends NormalFragment { if (isExit && TextUtils.isEmpty(editContent)) { getActivity().finish(); return; - } else if (!isExit && editContent.equals(mCacheAnswerContent)) { + } else if (!isExit && (editContent == null || editContent.equals(mCacheAnswerContent))) { return; } JSONObject content = new JSONObject(); 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 215660f96a..a4259614e5 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 @@ -2,7 +2,9 @@ package com.gh.gamecenter.ask.questionsdetail; import android.arch.lifecycle.Lifecycle; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; import android.widget.TextView; @@ -23,10 +25,13 @@ import com.gh.gamecenter.baselist.LoadType; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; +import org.json.JSONObject; + import java.util.List; import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; import retrofit2.HttpException; import rx.Observable; import rx.android.schedulers.AndroidSchedulers; @@ -47,7 +52,7 @@ public class QuestionsDetailFragment extends ListFragment { private QuestionsDetailAdapter mAdapter; - private QuestionsDetailEntity mQuestionsDetailEntity; + private QuestionsDetailEntity mQuestionsDetailEntity; private String mQuestionsId; @@ -82,6 +87,19 @@ public class QuestionsDetailFragment extends ListFragment { getQuestionsDetail(); } + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + mReuseNoConn.setOnClickListener(view1 -> { // 重新设置重连点击 + mReuseNoConn.setVisibility(View.GONE); + mReuseNoData.setVisibility(View.GONE); + mListLoading.setVisibility(View.VISIBLE); + mListRv.setVisibility(View.GONE); + mListRefresh.setRefreshing(false); + getQuestionsDetail(); + }); + } + // 列表数据为空也要正常显示(有列表头) @Override public void onLoadEmpty() { @@ -94,11 +112,12 @@ public class QuestionsDetailFragment extends ListFragment { switch (v.getId()) { case R.id.questionsdetail_answer: if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) - CheckLoginUtils.checkLogin(getContext(), () ->{ + CheckLoginUtils.checkLogin(getContext(), () -> { if (mQuestionsDetailEntity != null && mQuestionsDetailEntity.getMe().isQuestionAnswered()) { - Bundle bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_ANSWER_ID, ""); // todo myanswerID - NormalActivity.startFragment(getContext(), AskAnswerDetailFragment.class, bundle); + toast("暂时没有answerId,无法跳转"); +// Bundle bundle = new Bundle(); +// bundle.putString(EntranceUtils.KEY_ANSWER_ID, ""); // todo 暂时没有 myanswerID +// NormalActivity.startFragment(getContext(), AskAnswerDetailFragment.class, bundle); } else { ((AskQuestionsDetailActivity) getActivity()).show(AskQuestionsDetailActivity.QUESTIONS_DETAIL_ANSWER); } @@ -190,10 +209,11 @@ public class QuestionsDetailFragment extends ListFragment { mAnswerTv.setText(R.string.questions_detail_check_answer); } else { mAnswerTv.setText(R.string.question_detail_answer); + getUserAnswerDrafts(); } mQuestionsDetailEntity = response; mAdapter.setQuestionsEntity(response); - mListViewModel.load(LoadType.NORMAL); + mListViewModel.load(LoadType.REFRESH); } @Override @@ -203,4 +223,31 @@ public class QuestionsDetailFragment extends ListFragment { } }); } + + private void getUserAnswerDrafts() { + RetrofitManager.getInstance(getContext()).getApi() + .getUserAnswerDrafts(mQuestionsId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onResponse(ResponseBody response) { + super.onResponse(response); + try { + JSONObject object = new JSONObject(response.string()); + String drafts = object.getString("content"); + if (!TextUtils.isEmpty(drafts)) { + mAnswerTv.setText(R.string.answer_detail_edit_answer); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(HttpException e) { + super.onFailure(e); + } + }); + } } diff --git a/app/src/main/java/com/gh/gamecenter/baselist/ListFragment.java b/app/src/main/java/com/gh/gamecenter/baselist/ListFragment.java index 45bd4aa44e..ca7422382d 100644 --- a/app/src/main/java/com/gh/gamecenter/baselist/ListFragment.java +++ b/app/src/main/java/com/gh/gamecenter/baselist/ListFragment.java @@ -91,17 +91,14 @@ public abstract class ListFragment extends NormalFragment implements mListViewModel.load(LoadType.NORMAL); } }); - mReuseNoConn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - mReuseNoConn.setVisibility(View.GONE); - mReuseNoData.setVisibility(View.GONE); - mListLoading.setVisibility(View.VISIBLE); - mListRv.setVisibility(View.GONE); - mListRefresh.setRefreshing(false); + mReuseNoConn.setOnClickListener(view1 -> { + mReuseNoConn.setVisibility(View.GONE); + mReuseNoData.setVisibility(View.GONE); + mListLoading.setVisibility(View.VISIBLE); + mListRv.setVisibility(View.GONE); + mListRefresh.setRefreshing(false); - mListViewModel.load(LoadType.REFRESH); - } + mListViewModel.load(LoadType.REFRESH); }); } diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageItemVieHolder.java b/app/src/main/java/com/gh/gamecenter/message/MessageItemVieHolder.java index 0ffedcb700..2fe5c277b5 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageItemVieHolder.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageItemVieHolder.java @@ -50,11 +50,13 @@ public class MessageItemVieHolder extends BaseRecyclerViewHolder { content = itemView.getContext().getString(R.string.message_comment_content, entity.getComment().getContent()); mUserStatus.setVisibility(View.GONE); mVoteIcon.setVisibility(View.VISIBLE); + mContent.setMaxLines(1); break; case "comment": mUserStatus.setText(R.string.reply_comment); title = itemView.getContext().getString(R.string.message_article_title, entity.getArticle().getTitle()); content = itemView.getContext().getString(R.string.message_comment_content, entity.getComment().getContent()); + mContent.setMaxLines(1); break; case "invited": title = itemView.getContext().getString(R.string.message_questions_title, entity.getQuestion().getTitle()); @@ -67,17 +69,20 @@ public class MessageItemVieHolder extends BaseRecyclerViewHolder { entity.getUserEntity().getName(), entity.getAnswer().getContent()); mUserStatus.setText(R.string.answer_myquestions); + mContent.setMaxLines(2); break; case "answer_vote": title = itemView.getContext().getString(R.string.message_questions_title, entity.getQuestion().getTitle()); content = itemView.getContext().getString(R.string.message_myanswer_content, entity.getAnswer().getContent()); mUserStatus.setText(R.string.vote_myanswer); + mContent.setMaxLines(2); break; case "follow_question": title = entity.getQuestion().getTitle(); content = itemView.getContext().getString(R.string.message_answer_content, entity.getUserEntity().getName(), entity.getAnswer().getContent()); + mContent.setMaxLines(2); break; default: diff --git a/app/src/main/res/layout/message_item_answer.xml b/app/src/main/res/layout/message_item_answer.xml index cfd0c7f77d..1b615fc9f6 100644 --- a/app/src/main/res/layout/message_item_answer.xml +++ b/app/src/main/res/layout/message_item_answer.xml @@ -56,6 +56,7 @@ android:padding = "11dp" android:textColor = "@color/title" android:textSize = "11dp" + android:maxLines="1" android:layout_marginTop="12dp" app:layout_constraintLeft_toRightOf = "@id/message_item_user_icon" app:layout_constraintRight_toRightOf = "parent" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ac00414ec5..55191b6ad6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -502,5 +502,7 @@ 我来回答 继续回答 邀请回答 + 编写答案 + 修改答案”