package com.porster.gift.view.study; import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.RadioButton; import com.porster.gift.R; import com.porster.gift.core.BaseFragment; import com.porster.gift.model.AnswerModel; import com.porster.gift.model.QuestionModel; import com.porster.gift.utils.IntentHelper; import com.porster.gift.utils.LogCat; import com.porster.gift.utils.ViewHolder; import com.porster.gift.view.dev.DevToolsAct; import com.porster.gift.view.gift.GiftAct; import com.porster.gift.widget.recycler.BaseAdapter; import com.porster.gift.widget.recycler.OnListItemPartClickListener; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Created by Porster on 17/3/31. */ public class QuestionFragment extends BaseFragment implements View.OnClickListener{ private RecyclerView mRecycler; private SelectAdapter mAdapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { if(mainView==null){ mainView=inflater.inflate(R.layout.fragment_question,container,false); mRecycler=$(R.id.q_select); mRecycler.setLayoutManager(new LinearLayoutManager(mContext)); mAdapter=new SelectAdapter(mContext); mRecycler.setAdapter(mAdapter); mGiftModel= (QuestionModel) getArguments().getSerializable(IntentHelper.KEY1); initUI(); } return mainView; } @Override public void onDestroyView() { if(mainView!=null){ ((ViewGroup)mainView.getParent()).removeView(mainView); } super.onDestroyView(); } private QuestionModel mGiftModel; public void initUI() { setText(R.id.q_title,mGiftModel.id+"、"+(mGiftModel.multi?"(多选)":"(单选)")+mGiftModel.title); $(R.id.g_multi_submit).setOnClickListener(this); $(R.id.g_multi_submit).setVisibility(mGiftModel.hasAnswer?View.GONE:View.VISIBLE); if(getActivity() instanceof GiftAct){//认证模式不显示提交按钮 GONE($(R.id.g_multi_submit)); } final List<AnswerModel> models=mGiftModel.choose; Collections.shuffle(models); mAdapter.clear(); mAdapter.addItems(models); mAdapter.setItemClick(new OnListItemPartClickListener() { @Override public void onListItemPartClick(View view, Object obj, int state) { AnswerModel bean= (AnswerModel) obj; bean.isSelected=!bean.isSelected; if(!mGiftModel.multi){//单选 for (AnswerModel answerModel : getAdapter().getList()) { if(answerModel==bean){ continue; } answerModel.isSelected=false; } mAdapter.notifyItemRangeChanged(0,getAdapter().getItemCount()); }else{ mAdapter.notifyItemChanged(state); } } }); } public SelectAdapter getAdapter() { return mAdapter; } public RecyclerView getRecycler() { return mRecycler; } public QuestionModel getGiftModel() { return mGiftModel; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.g_multi_submit: //回答结果 List<AnswerModel> choose=new ArrayList<>(); for (AnswerModel answerModel : getAdapter().getList()) { if(answerModel.isSelected){ choose.add(answerModel); } } if(choose.size()==0){ mActivity.showToast("请选择"); return; } mGiftModel.hasAnswer =true; boolean resultIsRight; if(mGiftModel.multi){//多选 resultIsRight=compareResult(choose,getAdapter().getList()); }else{ resultIsRight=choose.get(0).result; } mGiftModel.resultIsRight =resultIsRight;//标记结果 if(!resultIsRight){//回答错误 ((StudyAct) getActivity()).showToast("答案不正确"); if(getActivity() instanceof StudyAct){ ((StudyAct) getActivity()).checkHasScrollToNextPage(null); } }else{//回答正确 if(getActivity() instanceof StudyAct){ ((StudyAct) getActivity()).next(DevToolsAct.DEV_AUTO_ANSWER?100:500); } } mAdapter.notifyDataSetChanged(); if(getActivity() instanceof StudyAct){ ((StudyAct) getActivity()).updata(mGiftModel); } GONE($(R.id.g_multi_submit)); LogCat.i(mGiftModel.resultIsRight?"回答正确":"回答错误"); break; } } /** * 比较选择结果是否正确 * @param choose 选择 * @param questions 问题 */ public static boolean compareResult(List<AnswerModel> choose,List<AnswerModel> questions){ int rightLen=0; for (AnswerModel question : questions) { if(question.result){ rightLen++; } } if(choose.size()!=rightLen){//结果与题目正确数量对不上,直接判定回答错误 return false; } for (AnswerModel question : questions) { if(question.result){ boolean isFind=false;//结果里不包含正确答案,判定回答错误 for (AnswerModel chooseAnswer : choose) { if(TextUtils.equals(question.title,chooseAnswer.title)){ isFind=true; break; } } if(!isFind){ return false; } }else{ boolean isFind=false;//错误的结果里包含了选择的答案,判定回答错误 for (AnswerModel chooseAnswer : choose) { if(TextUtils.equals(question.title,chooseAnswer.title)){ isFind=true; break; } } if(isFind){ return false; } } } return true; } private class SelectAdapter extends BaseAdapter<AnswerModel>{ SelectAdapter(Context mContext) { super(mContext); } @Override public int getLayoutId() { return R.layout.fragment_question_item; } @Override public void bindView(View view, int position, AnswerModel bean) { setText(view,R.id.s_name,bean.title); ImageView s_no= ViewHolder.get(view,R.id.s_no); RadioButton s_check=ViewHolder.get(view,R.id.s_check); s_check.setChecked(bean.isSelected); view.setEnabled(!mGiftModel.hasAnswer); if(mGiftModel.hasAnswer){//回答过了,显示答案 s_no.setImageResource(bean.result?R.drawable.ok:R.drawable.no); if(bean.result||bean.isSelected){//仅显示答案以及选择的选择 s_no.setVisibility(View.VISIBLE); }else{ s_no.setVisibility(View.GONE); } }else{ s_no.setVisibility(View.GONE); } setOnClick(s_check,bean,position); setOnClick(view,bean,position); } } @Override public void devModel() { if(DevToolsAct.DEV_AUTO_ANSWER){ for (int i = 0; i < mGiftModel.choose.size(); i++) { AnswerModel bean=mGiftModel.choose.get(i); if(bean.result){ View v=mRecycler.getChildAt(i); v.performClick(); } } ((StudyAct) getActivity()).next(DevToolsAct.DEV_AUTO_ANSWER?100:500); } } }