From 40c55e716d1e225b04ea7eb3db59c8b8858d4c84 Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Fri, 8 Dec 2017 14:47:27 +0800 Subject: [PATCH] =?UTF-8?q?=E9=97=AE=E9=A2=98=E8=AF=A6=E6=83=85/=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E8=AF=A6=E6=83=85-=E9=82=80=E8=AF=B7=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2/=E9=97=AE=E9=A2=98=E8=AF=A6=E6=83=85-=E5=9B=9E?= =?UTF-8?q?=E7=AD=94=E7=BC=96=E8=BE=91=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 4 + .../AskQuestionsDetailActivity.java | 31 ++++ .../com/gh/gamecenter/ask/AskHotFragment.java | 3 +- .../gh/gamecenter/baselist/ListFragment.java | 3 +- .../questionsdetail/AnswerEditFragment.java | 152 ++++++++++++++++++ .../QuestionsDetailAdapter.java | 102 ++++++++++++ .../QuestionsDetailFragment.java | 54 +++++++ .../QuestionsDetailItemViewHolder.java | 41 +++++ .../QuestionsInviteAdapter.java | 85 ++++++++++ .../QuestionsInviteFragment.java | 28 ++++ .../QuestionsInviteItemViewHolder.java | 32 ++++ .../QuestionsInviteTopItemViewHolder.java | 23 +++ .../drawable-xxhdpi/answer_edit_img_icon.png | Bin 0 -> 1048 bytes .../answer_edit_questions_icon.png | Bin 0 -> 881 bytes .../questionsdetail_answer_icon.png | Bin 0 -> 829 bytes .../questionsdetail_footer_icon.png | Bin 0 -> 410 bytes .../questionsdetail_invite_icon.png | Bin 0 -> 1077 bytes .../layout/activity_ask_questionsdetail.xml | 14 ++ .../main/res/layout/fragment_answer_edit.xml | 62 +++++++ .../res/layout/fragment_questionsdetail.xml | 75 +++++++++ .../layout/questionsdetail_footer_item.xml | 10 ++ .../main/res/layout/questionsdetail_item.xml | 85 ++++++++++ .../res/layout/questionsdetail_tag_item.xml | 10 ++ .../main/res/layout/questionsinvite_item.xml | 71 ++++++++ .../res/layout/questionsinvite_top_item.xml | 31 ++++ app/src/main/res/values/strings.xml | 1 + 26 files changed, 915 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/gh/gamecenter/AskQuestionsDetailActivity.java create mode 100644 app/src/main/java/com/gh/gamecenter/questionsdetail/AnswerEditFragment.java create mode 100644 app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsDetailAdapter.java create mode 100644 app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsDetailFragment.java create mode 100644 app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsDetailItemViewHolder.java create mode 100644 app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteAdapter.java create mode 100644 app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteFragment.java create mode 100644 app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteItemViewHolder.java create mode 100644 app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteTopItemViewHolder.java create mode 100644 app/src/main/res/drawable-xxhdpi/answer_edit_img_icon.png create mode 100644 app/src/main/res/drawable-xxhdpi/answer_edit_questions_icon.png create mode 100644 app/src/main/res/drawable-xxhdpi/questionsdetail_answer_icon.png create mode 100644 app/src/main/res/drawable-xxhdpi/questionsdetail_footer_icon.png create mode 100644 app/src/main/res/drawable-xxhdpi/questionsdetail_invite_icon.png create mode 100644 app/src/main/res/layout/activity_ask_questionsdetail.xml create mode 100644 app/src/main/res/layout/fragment_answer_edit.xml create mode 100644 app/src/main/res/layout/fragment_questionsdetail.xml create mode 100644 app/src/main/res/layout/questionsdetail_footer_item.xml create mode 100644 app/src/main/res/layout/questionsdetail_item.xml create mode 100644 app/src/main/res/layout/questionsdetail_tag_item.xml create mode 100644 app/src/main/res/layout/questionsinvite_item.xml create mode 100644 app/src/main/res/layout/questionsinvite_top_item.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fbd856f9da..2e0e19c684 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -237,6 +237,10 @@ android:name = "com.gh.gamecenter.AskSelectGameActivity" android:screenOrientation = "portrait" /> + + extends BaseFragment implements mListViewModel = ViewModelProviders.of(this, factory).get(ListViewModel.class); mListViewModel.getObsListData().observe(this, this); mListViewModel.load(LoadType.nomarl); + + mListRv.addItemDecoration(new VerticalItemDecoration(getContext(), 8, true)); } @Override @@ -69,7 +71,6 @@ public abstract class ListFragment extends BaseFragment implements mLayoutManager = new LinearLayoutManager(getContext()); mListRv.setLayoutManager(mLayoutManager); mListRv.setAdapter(provideListAdapter()); - mListRv.addItemDecoration(new VerticalItemDecoration(getContext(), 8, true)); mListRv.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { diff --git a/app/src/main/java/com/gh/gamecenter/questionsdetail/AnswerEditFragment.java b/app/src/main/java/com/gh/gamecenter/questionsdetail/AnswerEditFragment.java new file mode 100644 index 0000000000..9166978aad --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/questionsdetail/AnswerEditFragment.java @@ -0,0 +1,152 @@ +package com.gh.gamecenter.questionsdetail; + +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.Bundle; +import android.provider.MediaStore; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.text.Editable; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.style.ImageSpan; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import com.gh.base.fragment.BaseFragment; +import com.gh.gamecenter.R; +import com.lightgame.utils.Utils; + +import java.io.FileOutputStream; + +import butterknife.BindView; +import butterknife.OnClick; + +import static com.gh.gamecenter.SelectUserIconActivity.MEDIA_ICON_REQUEST; + +/** + * Created by khy on 7/12/17. + */ + +public class AnswerEditFragment extends BaseFragment { + @BindView(R.id.answer_edit_title) + TextView mTitle; + @BindView(R.id.answer_edit_content) + EditText mEditContent; + @BindView(R.id.answer_edit_img_icon) + ImageView mImgIcon; + + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (data != null && requestCode == MEDIA_ICON_REQUEST) { + Uri selectedImage = data.getData(); + if (selectedImage == null || getActivity() == null) { + return; + } + String[] filePathColumn = {MediaStore.Images.Media.DATA}; + + Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null); + if (cursor == null) { + return; + } + cursor.moveToFirst(); + + int columnIndex = cursor.getColumnIndex(filePathColumn[0]); + String picturePath = cursor.getString(columnIndex); + cursor.close(); + + Bitmap bitmap = compressPicture(picturePath); + + insertPicToEt(bitmap); // todo 插入图片前应该向服务器提交图片 + + Utils.log("picturePath = " + picturePath); + } + } + + @Override + protected int getLayoutId() { + return R.layout.fragment_answer_edit; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + } + + /** + * 压缩图片 + * 规则: + * 1.如果图片大于当前EditText的最大宽度则按比例缩放,使图片宽度和EditText的宽度保持一致 (高度不处理) + * 2.如果图片小于当前EditText 由于比例限制 将不处理 + * @param srcPath 图片路径 + * @return + */ + public Bitmap compressPicture(String srcPath) { + + FileOutputStream fos = null; + BitmapFactory.Options op = new BitmapFactory.Options(); + + // 开始读入图片,此时把options.inJustDecodeBounds 设回true了 + op.inJustDecodeBounds = true; + Bitmap bitmap = BitmapFactory.decodeFile(srcPath, op); + op.inJustDecodeBounds = false; + + // 缩放图片的尺寸 + float w = op.outWidth; + float h = op.outHeight; + float index = w/h; + int width = mEditContent.getWidth(); + float hh = width/index; + float ww = width; + + float be = 1.0f; + if (w > h && w > ww) { + be = (float) (w / ww); + } else if (w < h && h > hh) { + be = (float) (h / hh); + } + if (be <= 0) { + be = 1.0f; + } + op.inSampleSize = (int) be;// 设置缩放比例,这个数字越大,图片大小越小. + // 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了 + bitmap = BitmapFactory.decodeFile(srcPath, op); + int desWidth = (int) (w / be); + int desHeight = (int) (h / be); + return Bitmap.createScaledBitmap(bitmap, desWidth, desHeight, true); + + } + + @OnClick(R.id.answer_edit_img_icon) + public void onClick(View view) { + if (view.getId() == R.id.answer_edit_img_icon) { + Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + startActivityForResult(intent, MEDIA_ICON_REQUEST); + } + } + + private void insertPicToEt(Bitmap bitmap) { + if (bitmap == null) return; + ImageSpan imageSpan = new ImageSpan(getContext(), bitmap); + int index = mEditContent.getSelectionStart(); + String tempUrl = ""; + SpannableString spannableString = new SpannableString(tempUrl); + spannableString.setSpan(imageSpan, 0, tempUrl.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + Editable editableText = mEditContent.getEditableText(); + if (index < 0 || index >= editableText.length()) { + editableText.append(spannableString); + } else { + editableText.insert(index, spannableString); + } + + Utils.log("insertPicToEt = "); + + } +} diff --git a/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsDetailAdapter.java new file mode 100644 index 0000000000..d82d4cfb22 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsDetailAdapter.java @@ -0,0 +1,102 @@ +package com.gh.gamecenter.questionsdetail; + +import android.content.Context; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.gh.base.OnListClickListener; +import com.gh.common.constant.ItemViewType; +import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder; +import com.gh.gamecenter.ask.AskItemViewHolder; +import com.lightgame.adapter.BaseRecyclerAdapter; + +/** + * Created by khy on 7/12/17. + */ + +public class QuestionsDetailAdapter extends BaseRecyclerAdapter { + + private OnListClickListener mListClickListener; + + public QuestionsDetailAdapter(Context context, OnListClickListener listClickListener) { + super(context); + mListClickListener = listClickListener; + } + + @Override + public int getItemViewType(int position) { + if (position == 0) { + return ItemViewType.ITEM_TOP; + } else if (position == getItemCount() - 1) { + return ItemViewType.ITEM_FOOTER; + } else { + return ItemViewType.ITEM_BODY; + } + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view; + switch (viewType) { + case ItemViewType.ITEM_TOP: + view = mLayoutInflater.inflate(R.layout.questionsdetail_item, parent, false); + return new QuestionsDetailItemViewHolder(view, null, mListClickListener); + case ItemViewType.ITEM_FOOTER: + view = mLayoutInflater.inflate(R.layout.questionsdetail_footer_item, parent, false); + return new ReuseViewHolder(view); + case ItemViewType.ITEM_BODY: + view = mLayoutInflater.inflate(R.layout.ask_hot_item, parent, false); + return new AskItemViewHolder(view, null, mListClickListener); + default: + return null; + } + + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + switch (getItemViewType(position)) { + case ItemViewType.ITEM_TOP: + initQuestionsDetailItemViewHolder((QuestionsDetailItemViewHolder) holder); + break; + case ItemViewType.ITEM_FOOTER: + break; + case ItemViewType.ITEM_BODY: + break; + } + } + + private void initQuestionsDetailItemViewHolder(QuestionsDetailItemViewHolder holder) { + + holder.mTagRv.setLayoutManager(new LinearLayoutManager(mContext, RecyclerView.HORIZONTAL, false)); + holder.mTagRv.setAdapter(new RecyclerView.Adapter() { + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = mLayoutInflater.inflate(R.layout.questionsdetail_tag_item, parent, false); + return new ReuseViewHolder(view); + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + View item = holder.itemView; + if (item instanceof TextView) { + TextView tag = (TextView) item; + } + } + + @Override + public int getItemCount() { + return 0; + } + }); + } + + @Override + public int getItemCount() { + return 0; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsDetailFragment.java b/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsDetailFragment.java new file mode 100644 index 0000000000..9b1d24fbdd --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsDetailFragment.java @@ -0,0 +1,54 @@ +package com.gh.gamecenter.questionsdetail; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.RelativeLayout; + +import com.gh.base.fragment.BaseFragment; +import com.gh.gamecenter.R; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * Created by khy on 7/12/17. + */ + +public class QuestionsDetailFragment extends BaseFragment { + + @BindView(R.id.questionsdetail_rv) + RecyclerView mRecyclerView; + @BindView(R.id.questionsdetail_answer) + RelativeLayout mAnswer; + @BindView(R.id.questionsdetail_invite) + RelativeLayout mInvite; + + QuestionsDetailAdapter mAdapter; + + @Override + protected int getLayoutId() { + return R.layout.fragment_questionsdetail; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + mAdapter = new QuestionsDetailAdapter(getContext(), this); + mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + mRecyclerView.setAdapter(mAdapter); + } + + @OnClick({R.id.questionsdetail_answer, R.id.questionsdetail_invite}) + public void onClick(View v) { + switch (v.getId()) { + case R.id.questionsdetail_answer: + break; + case R.id.questionsdetail_invite: + break; + } + } +} diff --git a/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsDetailItemViewHolder.java b/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsDetailItemViewHolder.java new file mode 100644 index 0000000000..b075425620 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsDetailItemViewHolder.java @@ -0,0 +1,41 @@ +package com.gh.gamecenter.questionsdetail; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.TextView; + +import com.facebook.drawee.view.SimpleDraweeView; +import com.gh.base.BaseRecyclerViewHolder; +import com.gh.base.OnListClickListener; +import com.gh.gamecenter.R; + +import butterknife.BindView; + +/** + * Created by khy on 7/12/17. + */ + +public class QuestionsDetailItemViewHolder extends BaseRecyclerViewHolder { + @BindView(R.id.questionsdetail_item_tagrv) + public RecyclerView mTagRv; + @BindView(R.id.questionsdetail_item_title) + public TextView mTitle; + @BindView(R.id.questionsdetail_item_des) + public TextView mDes; + @BindView(R.id.questionsdetail_item_pic1) + public SimpleDraweeView mPic1; + @BindView(R.id.questionsdetail_item_pic2) + public SimpleDraweeView mPic2; + @BindView(R.id.questionsdetail_item_pic3) + public SimpleDraweeView mPic3; + @BindView(R.id.questionsdetail_item_answercount) + public TextView mAnswercount; + @BindView(R.id.questionsdetail_item_concern) + public TextView mConcern; + + public QuestionsDetailItemViewHolder(View itemView, Object data, OnListClickListener listClickListener) { + super(itemView, data, listClickListener); + itemView.setOnClickListener(this); + mConcern.setOnClickListener(this); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteAdapter.java b/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteAdapter.java new file mode 100644 index 0000000000..c0e5af4754 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteAdapter.java @@ -0,0 +1,85 @@ +package com.gh.gamecenter.questionsdetail; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; + +import com.gh.base.OnListClickListener; +import com.gh.common.constant.ItemViewType; +import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.baselist.BaseListAdapter; +import com.gh.gamecenter.baselist.LoadStatus; + +import java.util.List; + +/** + * Created by khy on 7/12/17. + */ + +public class QuestionsInviteAdapter extends BaseListAdapter { + + private OnListClickListener mListClickListener; + + public QuestionsInviteAdapter(Context context, OnListClickListener listClickListener) { + super(context); + mListClickListener = listClickListener; + } + + @Override + protected void provideListData(List listData) { + + } + + @Override + protected void loadChange(LoadStatus status) { + + } + + @Override + public int getItemViewType(int position) { + if (position == 0) { + return ItemViewType.ITEM_TOP; + } else if (position == getItemCount() - 1) { + return ItemViewType.ITEM_FOOTER; + } else { + return ItemViewType.ITEM_BODY; + } + } + + @Override + 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); + case ItemViewType.ITEM_BODY: + view = mLayoutInflater.inflate(R.layout.questionsinvite_item, parent, false); + return new QuestionsInviteItemViewHolder(view, null, mListClickListener); + default: + return null; + } + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + switch (getItemViewType(position)) { + case ItemViewType.ITEM_TOP: + break; + case ItemViewType.ITEM_FOOTER: + break; + case ItemViewType.ITEM_BODY: + break; + } + } + + @Override + public int getItemCount() { + return 0; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteFragment.java b/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteFragment.java new file mode 100644 index 0000000000..a61ea91a5e --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteFragment.java @@ -0,0 +1,28 @@ +package com.gh.gamecenter.questionsdetail; + +import com.gh.gamecenter.baselist.BaseListAdapter; +import com.gh.gamecenter.baselist.ListFragment; +import com.gh.gamecenter.entity.NewsEntity; + +import java.util.List; + +import rx.Observable; + +/** + * Created by khy on 7/12/17. + */ + +public class QuestionsInviteFragment extends ListFragment { + + private QuestionsInviteAdapter mAdapter; + + @Override + public Observable> provideDataObservable() { + return null; + } + + @Override + protected BaseListAdapter provideListAdapter() { + return mAdapter == null ? mAdapter = new QuestionsInviteAdapter(getContext(), this) : mAdapter; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteItemViewHolder.java b/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteItemViewHolder.java new file mode 100644 index 0000000000..d455088c49 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteItemViewHolder.java @@ -0,0 +1,32 @@ +package com.gh.gamecenter.questionsdetail; + +import android.view.View; +import android.widget.TextView; + +import com.facebook.drawee.view.SimpleDraweeView; +import com.gh.base.BaseRecyclerViewHolder; +import com.gh.base.OnListClickListener; +import com.gh.gamecenter.R; + +import butterknife.BindView; + +/** + * Created by khy on 7/12/17. + */ + +public class QuestionsInviteItemViewHolder extends BaseRecyclerViewHolder { + @BindView(R.id.questionsinvite_item_icon) + public SimpleDraweeView mIcon; + @BindView(R.id.questionsinvite_item_name) + public TextView mName; + @BindView(R.id.questionsinvite_item_answercount) + public TextView mAnswercount; + @BindView(R.id.questionsinvite_item_votecount) + public TextView mVotecount; + @BindView(R.id.questionsinvite_item_invite) + public TextView mInvite; + + public QuestionsInviteItemViewHolder(View itemView, Object data, OnListClickListener listClickListener) { + super(itemView, data, listClickListener); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteTopItemViewHolder.java b/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteTopItemViewHolder.java new file mode 100644 index 0000000000..7b044932de --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/questionsdetail/QuestionsInviteTopItemViewHolder.java @@ -0,0 +1,23 @@ +package com.gh.gamecenter.questionsdetail; + +import android.view.View; +import android.widget.TextView; + +import com.gh.base.BaseRecyclerViewHolder; +import com.gh.base.OnListClickListener; +import com.gh.gamecenter.R; + +import butterknife.BindView; + +/** + * Created by khy on 7/12/17. + */ + +public class QuestionsInviteTopItemViewHolder extends BaseRecyclerViewHolder { + @BindView(R.id.questionsinvite_top_item_invite) + public TextView mInvite; + + public QuestionsInviteTopItemViewHolder(View itemView, Object data, OnListClickListener listClickListener) { + super(itemView, data, listClickListener); + } +} diff --git a/app/src/main/res/drawable-xxhdpi/answer_edit_img_icon.png b/app/src/main/res/drawable-xxhdpi/answer_edit_img_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7306cdba6a47dda152f34b9426cf738469f151f1 GIT binary patch literal 1048 zcmV+z1n2vSP)?6oo~Ub@4bjZr<7Z-S1(aW`AMdto5w5p7*!cdf)XtYgNX_ z$6+aU;WjKb_n5-lc&JvZ9juIxkB{LiEbpveUBLvds$!>sAk!?z&MG!`+LJD0V-=&F z_M*!eoi|Ixr`UpD+UQKX8N~~@zP=(!l%u#C2TOLU)BK9f_`bfPnqd69{ugALACd}_ zM49vSn<#}mPd|uq4PL`f_ymJWMalws_}7q}B=pn@S>jwkV*gs)38dR3GK z_yl(}u^Yw5xT%%SdsUQ2u_mQ$6?-t2w)0*TWeg9r*k%#7rZw(GQEtI08QN`1YuJmT zT$-`nGAZM{UKC|X*=>7Kl*47W?L|?(&DicoOr|mHMN!_zUm4oHk=C#mMLC4sEw=d$ zPo*`UEy+|g7mJgE3f{vvIs1EDY~Ipr;Ev)hA!aJtF;gBC?|~h7Ly9*v5g;|rTzjOaQysxNG#X;a*lffMTjyi?shCKpf6&^?G<_0`tk!f zKcUUDn&)d%lUI}qUdAN__%f3X;*-8oESGKgT;qI54L1}qc;3z1cHCZsBMGcO_Djor zF=N+?OGuf?GgCI;i9Casz>tV@F3QtMR#8@p-DrJG(+!M>cxPGG4zh@{M6CByvkuw@ z&Jz2c)Mq_2X;qYyLp$-^`M18H6;bX{ z@FuBEtivl}mM8H?eL-4LuEvWQo$3ZQi49&V(ui`l2=DW5;XBP1aWLPMW}*z?9h{!m zqb}hw+}q5kkth|sq{|XO1@OEkhwY6-*(wsl{YF*fj@LCZNaAL3J*r=sj+3rPs!S4P zNL;Mz#nZ!9Scs3r^PWIbl)OOW%}zg&cweR8XG10iq9ia7C4qq`2@FI@U?55Y15pyF zN_jbM4l!93Cwl{qv#%+-h;sH`P&>I>(fF{?)Zw?a=>P5sBy6 S2jmR^0000)9t1+Pa8W^6EuvLsWnrOND2{kroEaR(=bQ1~bMM@FcfN4p-gExvfBwI@|GDSf znR9C9FYDnJJdY>v09K>cYcv8R_!HmYQyfj2jf>p|wI1=?@B!{BD#8N!4bw@pG1n=m zcU8{dnB^%P?!>X$LTjc|&=J1_vqK4~cxG!0t?h)gpTJL8Gu)U842DyRfc( zeolCZUW(*9H)`fDCy{)e#6zx$p2ndY*lxx@k@|&~@W#zHS{X5bP1uiD+SeZnGsnjl zu{|YZNM@2|Lv5k;cbc{_A9#fKgU7nAr*R>2AJK?;=R16ajrdm>0ruei9-EW6nz5hV z_#}&iwBpaZmbMePqpNN$_Tkm`^+CLh`+97$GLh9m+O&TU>)XffMe1j;q3!=U+@7+Z zT*)KtVFixhHsM1kC3%U5Ejjv*LhPsgNHG>)Rr37K!vP%4(EcrKj}*&wjMKg#b_i+QkEiit&at3a@skGoz3|q&1L;udv>%JFDr50gWh}m`R9bwIlblod zYyi9Sc?Z&=Nb$$pM`;+ReU3bc7c;cKCsG`XlDGJ0+eay>blQ)_SCvr~f2Qlak;cKO zivJH^bzM)UaZ=0u2rmf#{QlKdc7Gb@Wf#8}-!ElQTWD>-BWawMJ?$UvQ@>Hj zjumN~r@ixQFx5U^x0GQM5TTW{;0bDV(^gu||zn+0#Bxey_6l<5d>_aaF~C zku)2hS5f>~yg>QK`Plq|tx2=-Gu08_5>|muCC$cnox-$}oUesd7iFe}KZIE4l4j#< zufffV{{gQHn-5Dt(oFR>i^0?Ww6LaqlM)HfO20dQ4(|y2YcKY(9XW0!{*oa0ZILzw zl#yQXS8*6`3d6#(rd#}+@Gx8Q$Ajg>N}Le(!+kmASPJKVW>JX41O~L400000NkvXX Hu0mjfIU=~! literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/questionsdetail_answer_icon.png b/app/src/main/res/drawable-xxhdpi/questionsdetail_answer_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8360e494437d3e8747f810d00de57701b4c41946 GIT binary patch literal 829 zcmV-D1H$}?P)?XdoaeK0wSwS+WYE1PLqaMq@lwHQU=ez3G}{+CAh4&D7&x)!(kizaG=e zvP{$tJd3+=rEc^)KE}&MQG8L)?8o1O_yl`91cPhvAdcpFp4T&bS(fd>N0qc+aI6Ec zK5oHOjQ@@8MNxcH8mtq#veZj>9{+X#2bbb?Jb_E_G#)E6`@&d*6CH!WX&k_OjPIys z_OU*Of7C4)D2ieMvoU&gHLt(Y{D09uqY~E&+(=!78&~UE+TD(OjsG!c@D_eZDbyD3 zFgB$U)pQ^3NGZ^^C4Ne0S)ti;n=Dt`mfM5v3HEg@;`7u(ZC|#4Pg5&DU#;ocx~Ab$ z#?TeQ&S4xa3PU4FZQ;0a9QdLq89LK zYN57pZ^x%ot?Ai%5e`=gC#}m<3bh?`cjBQ2`?JE)@^CHvQNeZGhz&9A7sQHt3fBoI_);(6rkdT&7+_}&@JrmLwtlzm*6+`eKWFK9SJrz&4A0{OOIxOC9KlS* zejm2tfoi2~TW+r~W|}@`h`%cFjg`6w!Y+Dq3{OY!fzX1(qA1SbyLzQ*(Xwal)>(J7e+9FJtWWY(mox(2s9OGNZ0i2|t8%BsG zz`OA6YJih=!cBlv_)YM6jeuRO5TgK(2(x!pz`o$&2|L}c0H+04vbiXVM!o za33-Wy@4ldX`=w=a8Hb%!k)gch2AY(v`j)9Mx+e|S5o@A={i_Z6i3VT?+-kJXN3PD zrd$~PsrjQ%2wgacaLd40x$w^#2Q0J^Y^=ma!79C#f-qoG1QZLkil7** zVylgt(!$CnU=-KFiG1j8_RCIphk4H#=H9uTUa$87hjA%0-`PWSF^yTQMa1G>;nR3q zB2OaXZbWq2z@5QhAR?ym2))X$;A&=m9}Dk9MBKssI<8|OGrzWiOW-mdV?Q==HZwo9 zf=l2ep5qX{;X-Dv{ae=^rkI)UaSR_ZgI5u8t(9}5gBh&iOr@4^J2QWcg-c)x4{*Iw z&u}F(x5mN^kz3{5#Rkr`hD%@`%Q%3~LkHG2TEo@$({kOwsi_vw$bs$ZTvzq70WRTU zW^Tbq=ZH8`;8Fa*jm&)5tQiVV{5)$hUKhBD6T`s&;9AKQe>Q3z$470{-?k_H4EFW= z{eyUc^Od`Yo0<7@H*m-K4d$?2Zp-7KCcKR=Cir@P1NyI$bFR8^YybcN07*qoM6N<$ Ef*eV{xc~qF literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/questionsdetail_invite_icon.png b/app/src/main/res/drawable-xxhdpi/questionsdetail_invite_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d43764de1808332c3f7e34592e59811b0dbeb00f GIT binary patch literal 1077 zcmV-51j_q~P)v!RO*UdXcSMj$;%m{JL5d7)s{ zOM#GGgrbMaw2Y!O3oL^4p_^HmG}c&74{IN0Ih}pZ-e=~ZKiKeJYp?%aU-r8F|EsIF zx7RRrA!cGa&cz9N{XXo#Cal8;7#QjtLMYWq_b>pbVkxdJcz+x&$)EZ70*~Ugb~>xI z;WG-0u|+XtBVB;?cp1l6?X)WB7`%c<(3RI6z)P5cNqK!2CgMh{MPKrbnb?R4odjKj zTaxm6oP}Pzitm$mKjTfzLJwX{-c7+)W&__d+0Zsqn>6LMcbxLCY z(5i76&~z?MuS(NIS0?uMR*lPmZbW}>&%n`bKsC~>iT!q~#$`bN5Q7imQ98E`sG+(E z=jZk=aer>AvPb9>iM>dSnA+7utW3(wLkI_p8rM}8^b@?0+hef-Cso3W8Yf2hlk)O6 zc&3bFl`wBUzRvA4u~|$r%Ia(}Z@M%u@5js#!rx__tAOqkW6Jt4_246{62Xf!Squrc z8Jw5!TwYg7T_v;7WAHHURUDOX#m8clKOoM~M)V|g2gGgb zDu4Nex* zn7#S?G5OO}MSrvlPl*etuJ>`5xKbNwf_MROqL@oEubdFw(r<3wL z9fr)cP&^Fo&$6sxD4Bwe7FTzD6|cav9mN~esD!5_=-oIkx4*=Fo#U#mI_Ow&L$7O= z!O-rAP#yF(al0U9wo9A%x$DI@QETh!{uy*-66Ts3t}`#AxS;Rn6dC=bppJQBQ9M v&@hLpi6Pw%C9}Z}X{ESdt_~sWZ`9yFQFYGC#Ep}I00000NkvXXu0mjfTt*Fb literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_ask_questionsdetail.xml b/app/src/main/res/layout/activity_ask_questionsdetail.xml new file mode 100644 index 0000000000..aac4ab2bb4 --- /dev/null +++ b/app/src/main/res/layout/activity_ask_questionsdetail.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_answer_edit.xml b/app/src/main/res/layout/fragment_answer_edit.xml new file mode 100644 index 0000000000..20bd2de07a --- /dev/null +++ b/app/src/main/res/layout/fragment_answer_edit.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_questionsdetail.xml b/app/src/main/res/layout/fragment_questionsdetail.xml new file mode 100644 index 0000000000..c6a156ff31 --- /dev/null +++ b/app/src/main/res/layout/fragment_questionsdetail.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/questionsdetail_footer_item.xml b/app/src/main/res/layout/questionsdetail_footer_item.xml new file mode 100644 index 0000000000..d7018568a2 --- /dev/null +++ b/app/src/main/res/layout/questionsdetail_footer_item.xml @@ -0,0 +1,10 @@ + + diff --git a/app/src/main/res/layout/questionsdetail_item.xml b/app/src/main/res/layout/questionsdetail_item.xml new file mode 100644 index 0000000000..5d87351735 --- /dev/null +++ b/app/src/main/res/layout/questionsdetail_item.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/questionsdetail_tag_item.xml b/app/src/main/res/layout/questionsdetail_tag_item.xml new file mode 100644 index 0000000000..e6f5426fae --- /dev/null +++ b/app/src/main/res/layout/questionsdetail_tag_item.xml @@ -0,0 +1,10 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/questionsinvite_item.xml b/app/src/main/res/layout/questionsinvite_item.xml new file mode 100644 index 0000000000..47ddac1baa --- /dev/null +++ b/app/src/main/res/layout/questionsinvite_item.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/questionsinvite_top_item.xml b/app/src/main/res/layout/questionsinvite_top_item.xml new file mode 100644 index 0000000000..26b71f05ab --- /dev/null +++ b/app/src/main/res/layout/questionsinvite_top_item.xml @@ -0,0 +1,31 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 138b9b556d..9162b4963b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -441,5 +441,6 @@ 长按图片调整排序 恢复默认顺序 选择游戏 + 邀请