由于这个模块内容较多,篇幅较长,请耐心阅读。


习题模块分为两个部分

  • 习题列表界面
  • 习题详情界面

一、习题列表界面

1、习题界面

(1)、创建习题界面

res/layout文件夹中,新建一个布局文件,命名为main_view_exercises

(2)、导入界面图片

将习题界面所需图片 exercises_bg_1.pngexercises_bg_2.pngexercises_bg_3.pngexercises_bg_4.png导入drawable文件夹中。

(3)、习题界面代码main_view_exercises.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/white"><ListViewandroid:id="@+id/lv_list"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_marginBottom="55dp"android:divider="#E4E4E4"android:dividerHeight="1dp"/>
</LinearLayout>

2、习题界面Item

由于习题界面使用了ListView控件,所以需要创建一个Item界面。在res/layout文件夹中,新建一个布局文件,命名为exercises_list_item。代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@android:color/white"android:paddingBottom="15dp"android:paddingLeft="10dp"android:paddingRight="10dp"android:paddingTop="15dp"><TextViewandroid:id="@+id/tv_order"android:layout_width="40dp"android:layout_height="40dp"android:layout_gravity="center_vertical"android:layout_marginLeft="10dp"android:background="@drawable/exercises_bg_1"android:gravity="center"android:textColor="@android:color/white"android:textSize="16sp"/><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_marginLeft="15dp"android:gravity="center_vertical"android:orientation="vertical"><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:singleLine="true"android:textColor="#000000"android:textSize="14sp"/><TextViewandroid:id="@+id/tv_content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="2dp"android:singleLine="true"android:textColor="#a3a3a3"android:textSize="12sp"/></LinearLayout>
</LinearLayout>

3、创建ExerciseBean类

com.bocuegu.bean包中新建一个java类,命名为ExerciseBean。用来创建习题所有的属性。代码如下:
package com.boxuegu.bean;public class ExercisesBean {public int id;              //每章习题IDpublic String title;        //每章习题标题public String content;      //每章习题的数目public int background;      //每章习题前边的序列背景public int subjectId;       //每道习题的IDpublic String subject;      //每道习题的题干public String a;            //每道习题的A选项public String b;            //每道习题的B选项public String c;            //每道习题的C选项public String d;            //每道习题的D选项public int answer;          //每道习题的正确答案/** select为 0,1,2,3,4,的含义:* 0时表示所选选项是对的 * 1表示选项中的A是错误的 * 2表示选项中的B是错误的 * 3表示选项中的C是错误的 * 4表示选项中的D是错误的*/public int select;
}

4、习题界面Adapter

选择com.boxuegu包,创建adapter包。在adapter包中创建一个Java类,命名为ExercisesAdapter。由于ExercisesAdapter类继承自BaseAdapter类,所以要修改主类,代码如下:
package com.boxuegu.adapter;import android.content.Context;
import android.content.Intent;
import com.boxuegu.R;
import com.boxuegu.activity.ExercisesDetailActivity;
import com.boxuegu.bean.ExercisesBean;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;import java.util.List;//ExercisesAdapter类继承自BaseAdapter类
public class ExercisesAdapter extends BaseAdapter {private Context mContext;private List<ExercisesBean> ebl;public ExercisesAdapter(Context context){this.mContext = context;}//设置数据更新界面public void setData(List<ExercisesBean> ebl){this.ebl = ebl;notifyDataSetChanged();}//获取Item的总数@Overridepublic int getCount() {return ebl == null?0:ebl.size();}//根据position得到对应Item的对象@Overridepublic ExercisesBean getItem(int position) {return ebl == null ? null : ebl.get(position);}//根据position得到对应Item的ID@Overridepublic long getItemId(int position) {return position;}//根据position得到对应Item的视图,position是当前Item的位置@Overridepublic View getView(int position, View convertView, ViewGroup parent) {final ViewHolder vh;//复用convertViewif (convertView == null){vh = new ViewHolder();convertView = LayoutInflater.from(mContext).inflate(R.layout.exercises_list_item,null);vh.title = (TextView) convertView.findViewById(R.id.tv_title);vh.content = (TextView) convertView.findViewById(R.id.tv_content);vh.order = (TextView) convertView.findViewById(R.id.tv_order);convertView.setTag(vh);}else {vh = (ViewHolder) convertView.getTag();}//获取position对应的Item的数据对象final ExercisesBean bean = getItem(position);if (bean != null){vh.order.setText(position + 1 + "");vh.title.setText(bean.title);vh.content.setText(bean.content);vh.order.setBackgroundResource(bean.background);}//每个Item的点击事件convertView.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){if (bean == null)return;//跳转到习题详情界面  后面添加Intent intent = new Intent(mContext, ExercisesDetailActivity.class);intent.putExtra("id",bean.id);intent.putExtra("title",bean.title);mContext.startActivity(intent);}});return convertView;}class ViewHolder{public TextView title,content;public TextView order;}
}

5、习题界面逻辑代码

com.boxuegu.view包中创建一个ExercisesView的Java类。
package com.boxuegu.view;import android.app.Activity;
import com.boxuegu.R;
import com.boxuegu.adapter.ExercisesAdapter;
import com.boxuegu.bean.ExercisesBean;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ListView;import java.util.ArrayList;
import java.util.List;public class ExercisesView {private ListView lv_list;private ExercisesAdapter adapter;private List<ExercisesBean> ebl;private Activity mContext;private LayoutInflater mInflater;private View mCurrentView;public ExercisesView(Activity context){mContext = context;mInflater = LayoutInflater.from(mContext);}private void createView(){initView();}private void initView(){mCurrentView = mInflater.inflate(R.layout.main_view_exercises,null);lv_list = (ListView) mCurrentView.findViewById(R.id.lv_list);adapter = new ExercisesAdapter(mContext);initData();adapter.setData(ebl);lv_list.setAdapter(adapter);}//设置数据private void initData(){ebl = new ArrayList<ExercisesBean>();for (int i=0;i<10;i++){ExercisesBean bean = new ExercisesBean();bean.id = (i+1);switch (i){case 0:bean.title = "第1章 博客(网站)简介";bean.content="共计5题";bean.background=(R.drawable.exercises_bg_1);break;case 1:bean.title = "第2章 认识WordPress";bean.content="共计5题";bean.background=(R.drawable.exercises_bg_2);break;case 2:bean.title = "第3章 WordPress基础";bean.content="共计5题";bean.background=(R.drawable.exercises_bg_3);break;case 3:bean.title = "第4章 熟悉Linux系统";bean.content="共计5题";bean.background=(R.drawable.exercises_bg_4);break;case 4:bean.title = "第5章 PHP基本语法";bean.content="共计5题";bean.background=(R.drawable.exercises_bg_1);break;case 5:bean.title = "第6章 MySQL数据库";bean.content="共计5题";bean.background=(R.drawable.exercises_bg_2);break;case 6:bean.title = "第7章 Nginx服务器";bean.content="共计5题";bean.background=(R.drawable.exercises_bg_3);break;case 7:bean.title = "第8章 云服务器简介";bean.content="共计5题";bean.background=(R.drawable.exercises_bg_4);break;case 8:bean.title = "第9章 环境搭建过程";bean.content="共计5题";bean.background=(R.drawable.exercises_bg_1);break;case 9:bean.title = "第10章 WordPress主题";bean.content="共计5题";bean.background=(R.drawable.exercises_bg_2);break;default:break;}ebl.add(bean);}}//获取当前在导航栏上方显示对应的viewpublic View getView(){if (mCurrentView == null){createView();}return mCurrentView;}//显示当前导航栏上方所对应的view界面public void showView(){if (mCurrentView == null) {createView();}mCurrentView.setVisibility(View.VISIBLE);}}

6、修改底部导航栏代码

因为习题界面是通过底部导航栏进行跳转的,找到MainActivity.java文件的private RelativeLayout rl_title_bar;,在下方添加:
private ExercisesView mExerciseView;
找到MainActivity.java文件的createView()方法,在注释//习题界面下方添加如下代码:
if (mExerciseView == null){mExerciseView = new ExercisesView(this);mBodyLayout.addView(mExerciseView.getView());}else{mExerciseView.getView();}mExerciseView.showView();

二、习题详情界面

1、创建界面

(1)、创建习题详情界面

com.boxuegu.activity中创建一个Java类,命名为ExercisesDetailActivity。在res/layout文件夹下创建一个布局文件,命名为activity_exercises_detail

(2)、导入界面图片 exercises_a.pngexercises_b.pngexercises_c.pngexercises_d.pngexercises_error_icon.pngexercises_right_icon.png

(3)、界面代码activity_exercises_detail.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/white"><include layout="@layout/main_title_bar" /><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:layout_marginTop="15dp"android:text="一、选择题"android:textColor="#000000"android:textSize="16sp"android:textStyle="bold"android:visibility="gone"/><ListViewandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:id="@+id/lv_list"android:divider="@null"/></LinearLayout>

2、习题详情界面Item

res/layout文件夹中创建一个布局文件,命名为exercises_detail_list_item。代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@android:color/white"android:padding="15dp"><TextViewandroid:id="@+id/tv_subject"android:layout_width="fill_parent"android:layout_height="wrap_content"android:lineSpacingMultiplier="1.5"android:textColor="#000000"android:textSize="14sp"/><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="15dp"android:orientation="horizontal"><ImageViewandroid:id="@+id/iv_a"android:layout_width="35dp"android:layout_height="35dp"android:src="@drawable/exercises_a"/><TextViewandroid:id="@+id/tv_a"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="8dp"android:lineSpacingMultiplier="1.5"android:textColor="#000000"android:textSize="12sp"/></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="15dp"android:orientation="horizontal"><ImageViewandroid:id="@+id/iv_b"android:layout_width="35dp"android:layout_height="35dp"android:src="@drawable/exercises_b"/><TextViewandroid:id="@+id/tv_b"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="8dp"android:lineSpacingMultiplier="1.5"android:textColor="#000000"android:textSize="12sp"/></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="15dp"android:orientation="horizontal"><ImageViewandroid:id="@+id/iv_c"android:layout_width="35dp"android:layout_height="35dp"android:src="@drawable/exercises_c"/><TextViewandroid:id="@+id/tv_c"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="8dp"android:lineSpacingMultiplier="1.5"android:textColor="#000000"android:textSize="12sp"/></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="15dp"android:orientation="horizontal"><ImageViewandroid:id="@+id/iv_d"android:layout_width="35dp"android:layout_height="35dp"android:src="@drawable/exercises_d"/><TextViewandroid:id="@+id/tv_d"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="8dp"android:lineSpacingMultiplier="1.5"android:textColor="#000000"android:textSize="12sp"/></LinearLayout>
</LinearLayout>

3、习题数据的存放

(1)、如果没有assets文件夹则创建一个。

(2)、在assets文件夹下创建xml文件用来存放习题内容。

因为有10个章节的内容,所以要创建10个xml文件。这里演示一个,其余9个依次类推。注意,这里创建的是xml文件,不是android xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<infos><exercises id="1"><subject>1.下列哪个选项属于一个网站()。</subject><a>百度APP</a><b>腾讯网</b><c>谷歌浏览器</c><d>Eclipse</d><answer>2</answer></exercises><exercises id="2"><subject>2.个人博客的英文简称()。</subject><a>Eclipse</a><b>SDK</b><c>SDK Manager.exe</c><d>blog</d><answer>4</answer></exercises><exercises id="3"><subject>3.CMS系统属于什么类型的网站系统()。</subject><a>纯静态</a><b>纯动态</b><c>伪静态</c><d>以上都不对</d><answer>2</answer></exercises><exercises id="4"><subject>4.个人博客与网站的关系()。</subject><a>博客属于网站</a><b>网站属于博客</b><c>静态网站属于博客</c><d>静态博客属于网站</d><answer>1</answer></exercises><exercises id="5"><subject>5.动态博客有哪些功能()。</subject><a>发布文章</a><b>留言评论</b><c>后台管理</c><d>以上都对</d><answer>4</answer></exercises>
</infos>

(3)、解析xml文件

找到AnalysisUtils.java文件,添加以下代码用来解析XML文件:
//解析XML文件public static List<ExercisesBean> getExercisesInfos(InputStream is) throws Exception{XmlPullParser parser = Xml.newPullParser();parser.setInput(is,"utf-8");List<ExercisesBean> exercisesInfos = null;ExercisesBean exercisesInfo = null;int type = parser.getEventType();while (type!=XmlPullParser.END_DOCUMENT){switch (type){case XmlPullParser.START_TAG:if ("infos".equals(parser.getName())){exercisesInfos = new ArrayList<ExercisesBean>();}else if ("exercises".equals(parser.getName())){exercisesInfo = new ExercisesBean();String ids = parser.getAttributeValue(0);exercisesInfo.subjectId = Integer.parseInt(ids);}else if ("subject".equals(parser.getName())){String subject = parser.nextText();exercisesInfo.subject=subject;}else if ("a".equals(parser.getName())){String a = parser.nextText();exercisesInfo.a=a;}else if ("b".equals(parser.getName())){String b = parser.nextText();exercisesInfo.b=b;}else if ("c".equals(parser.getName())){String c = parser.nextText();exercisesInfo.c=c;}else if ("d".equals(parser.getName())){String d = parser.nextText();exercisesInfo.d=d;}else if ("answer".equals(parser.getName())){String answer = parser.nextText();exercisesInfo.answer=Integer.parseInt(answer);}break;case XmlPullParser.END_TAG:if ("exercises".equals(parser.getName())){exercisesInfos.add(exercisesInfo);exercisesInfo=null;}break;}type=parser.next();}return exercisesInfos;}

4、习题详情界面Adapter

com.boxuegu.adapter包中创建一个Java类,命名为ExrecisesDetailAdapter。代码如下:
package com.boxuegu.adapter;import android.content.Context;
import com.boxuegu.R;
import com.boxuegu.bean.ExercisesBean;
import com.boxuegu.utils.AnalysisUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;import java.util.ArrayList;
import java.util.List;public class ExrecisesDetailAdapter extends BaseAdapter {private Context mContext;private List<ExercisesBean> ebl;private OnSelectListener onSelectListener;public ExrecisesDetailAdapter(Context context,OnSelectListener onSelectListener){this.mContext = context;this.onSelectListener = onSelectListener;}public void setData(List<ExercisesBean> ebl){this.ebl = ebl;notifyDataSetChanged();}@Overridepublic int getCount() {return ebl == null ? 0 : ebl.size();}@Overridepublic ExercisesBean getItem(int position) {return ebl == null?null:ebl.get(position);}@Overridepublic long getItemId(int position) {return position;}//记录点击的位置private ArrayList<String> selectedPosition = new ArrayList<String>();@Overridepublic View getView(final int position, View convertView, final ViewGroup parent) {final ViewHolder vh;if (convertView == null){vh = new ViewHolder();convertView = LayoutInflater.from(mContext).inflate(R.layout.exercises_detail_list_item,null);vh.subject = (TextView) convertView.findViewById(R.id.tv_subject);vh.tv_a = (TextView) convertView.findViewById(R.id.tv_a);vh.tv_b = (TextView) convertView.findViewById(R.id.tv_b);vh.tv_c = (TextView) convertView.findViewById(R.id.tv_c);vh.tv_d = (TextView) convertView.findViewById(R.id.tv_d);vh.iv_a = (ImageView) convertView.findViewById(R.id.iv_a);vh.iv_b = (ImageView) convertView.findViewById(R.id.iv_b);vh.iv_c = (ImageView) convertView.findViewById(R.id.iv_c);vh.iv_d = (ImageView) convertView.findViewById(R.id.iv_d);convertView.setTag(vh);}else {vh=(ViewHolder) convertView.getTag();}final ExercisesBean bean = getItem(position);if (bean != null){vh.subject.setText(bean.subject);vh.tv_a.setText(bean.a);vh.tv_b.setText(bean.b);vh.tv_c.setText(bean.c);vh.tv_d.setText(bean.d);}if (!selectedPosition.contains("" + position)){vh.iv_a.setImageResource(R.drawable.exercises_a);vh.iv_b.setImageResource(R.drawable.exercises_b);vh.iv_c.setImageResource(R.drawable.exercises_c);vh.iv_d.setImageResource(R.drawable.exercises_d);AnalysisUtils.setABCDEnable(true,vh.iv_a,vh.iv_b,vh.iv_c,vh.iv_d);}else {AnalysisUtils.setABCDEnable(false,vh.iv_a,vh.iv_b,vh.iv_c,vh.iv_d);switch (bean.select){case 0:  //用户所选选项是正确的if (bean.answer == 1){vh.iv_a.setImageResource(R.drawable.exercises_right_icon);vh.iv_b.setImageResource(R.drawable.exercises_b);vh.iv_c.setImageResource(R.drawable.exercises_c);vh.iv_d.setImageResource(R.drawable.exercises_d);}else if (bean.answer == 2){vh.iv_a.setImageResource(R.drawable.exercises_a);vh.iv_b.setImageResource(R.drawable.exercises_right_icon);vh.iv_c.setImageResource(R.drawable.exercises_c);vh.iv_d.setImageResource(R.drawable.exercises_d);}else if (bean.answer == 3){vh.iv_a.setImageResource(R.drawable.exercises_a);vh.iv_b.setImageResource(R.drawable.exercises_b);vh.iv_c.setImageResource(R.drawable.exercises_right_icon);vh.iv_d.setImageResource(R.drawable.exercises_d);}else if (bean.answer == 4){vh.iv_a.setImageResource(R.drawable.exercises_a);vh.iv_b.setImageResource(R.drawable.exercises_b);vh.iv_c.setImageResource(R.drawable.exercises_c);vh.iv_d.setImageResource(R.drawable.exercises_right_icon);}break;case 1:  //用户所选选项A是错误的vh.iv_a.setImageResource(R.drawable.exercises_error_icon);if (bean.answer == 2){vh.iv_b.setImageResource(R.drawable.exercises_right_icon);vh.iv_c.setImageResource(R.drawable.exercises_c);vh.iv_d.setImageResource(R.drawable.exercises_d);}else if (bean.answer == 3){vh.iv_b.setImageResource(R.drawable.exercises_b);vh.iv_c.setImageResource(R.drawable.exercises_right_icon);vh.iv_d.setImageResource(R.drawable.exercises_d);}else if (bean.answer == 4){vh.iv_b.setImageResource(R.drawable.exercises_b);vh.iv_c.setImageResource(R.drawable.exercises_c);vh.iv_d.setImageResource(R.drawable.exercises_right_icon);}break;case 2:  //用户所选选项B是错误的vh.iv_b.setImageResource(R.drawable.exercises_error_icon);if (bean.answer == 1){vh.iv_a.setImageResource(R.drawable.exercises_right_icon);vh.iv_c.setImageResource(R.drawable.exercises_c);vh.iv_d.setImageResource(R.drawable.exercises_d);}else if (bean.answer == 3){vh.iv_a.setImageResource(R.drawable.exercises_a);vh.iv_c.setImageResource(R.drawable.exercises_right_icon);vh.iv_d.setImageResource(R.drawable.exercises_d);}else if (bean.answer == 4){vh.iv_a.setImageResource(R.drawable.exercises_a);vh.iv_c.setImageResource(R.drawable.exercises_c);vh.iv_d.setImageResource(R.drawable.exercises_right_icon);}break;case 3:  //用户所选选项C是错误的vh.iv_c.setImageResource(R.drawable.exercises_error_icon);if (bean.answer == 1){vh.iv_a.setImageResource(R.drawable.exercises_right_icon);vh.iv_b.setImageResource(R.drawable.exercises_b);vh.iv_d.setImageResource(R.drawable.exercises_d);}else if (bean.answer == 2){vh.iv_a.setImageResource(R.drawable.exercises_a);vh.iv_b.setImageResource(R.drawable.exercises_right_icon);vh.iv_d.setImageResource(R.drawable.exercises_d);}else if (bean.answer == 4){vh.iv_a.setImageResource(R.drawable.exercises_a);vh.iv_b.setImageResource(R.drawable.exercises_b);vh.iv_d.setImageResource(R.drawable.exercises_right_icon);}break;case 4:  //用户所选选项D是错误的vh.iv_c.setImageResource(R.drawable.exercises_error_icon);if (bean.answer == 1){vh.iv_a.setImageResource(R.drawable.exercises_right_icon);vh.iv_b.setImageResource(R.drawable.exercises_b);vh.iv_c.setImageResource(R.drawable.exercises_c);}else if (bean.answer == 2){vh.iv_a.setImageResource(R.drawable.exercises_a);vh.iv_b.setImageResource(R.drawable.exercises_right_icon);vh.iv_c.setImageResource(R.drawable.exercises_c);}else if (bean.answer == 3){vh.iv_a.setImageResource(R.drawable.exercises_a);vh.iv_b.setImageResource(R.drawable.exercises_b);vh.iv_c.setImageResource(R.drawable.exercises_right_icon);}break;default:break;}}//当用户点击A选项的点击事件vh.iv_a.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){if (selectedPosition.contains("" + position)){selectedPosition.remove("" + position);}else {selectedPosition.add(position + "");}onSelectListener.onSelectA(position,vh.iv_a,vh.iv_b,vh.iv_c,vh.iv_d);}});//当用户点击B选项的点击事件vh.iv_b.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){if (selectedPosition.contains("" + position)){selectedPosition.remove("" + position);}else {selectedPosition.add(position + "");}onSelectListener.onSelectA(position,vh.iv_a,vh.iv_b,vh.iv_c,vh.iv_d);}});//当用户点击C选项的点击事件vh.iv_c.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){if (selectedPosition.contains("" + position)){selectedPosition.remove("" + position);}else {selectedPosition.add(position + "");}onSelectListener.onSelectA(position,vh.iv_a,vh.iv_b,vh.iv_c,vh.iv_d);}});//当用户点击D选项的点击事件vh.iv_d.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){if (selectedPosition.contains("" + position)){selectedPosition.remove("" + position);}else {selectedPosition.add(position + "");}onSelectListener.onSelectA(position,vh.iv_a,vh.iv_b,vh.iv_c,vh.iv_d);}});return convertView;}class ViewHolder{public TextView subject,tv_a,tv_b,tv_c,tv_d;public ImageView iv_a,iv_b,iv_c,iv_d;}public interface OnSelectListener{void onSelectA(int position,ImageView iv_a,ImageView iv_b,ImageView iv_c,ImageView iv_d);void onSelectB(int position,ImageView iv_a,ImageView iv_b,ImageView iv_c,ImageView iv_d);void onSelectC(int position,ImageView iv_a,ImageView iv_b,ImageView iv_c,ImageView iv_d);void onSelectD(int position,ImageView iv_a,ImageView iv_b,ImageView iv_c,ImageView iv_d);}
}

5、习题详情界面逻辑代码——ExercisesDetailActivity.java

package com.boxuegu.activity;import android.content.pm.ActivityInfo;
import com.boxuegu.R;
import com.boxuegu.adapter.ExrecisesDetailAdapter;
import com.boxuegu.bean.ExercisesBean;
import com.boxuegu.utils.AnalysisUtils;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutCompat;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;public class ExercisesDetailActivity extends AppCompatActivity {private TextView tv_main_title;private TextView tv_back;private RelativeLayout rl_title_bar;private ListView lv_list;private String title;private int id;private List<ExercisesBean> ebl;private ExrecisesDetailAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_exercises_detail);//设置界面为竖屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//获取从习题界面传递过来的章节IDid = getIntent().getIntExtra("id",0);//获取从习题界面传递过来的章节标题title = getIntent().getStringExtra("title");ebl = new ArrayList<ExercisesBean>();initData();init();}private void initData(){try {//从XML文件中获取习题数据InputStream is = getResources().getAssets().open("chapter" + id +".xml");ebl = AnalysisUtils.getExercisesInfos(is);} catch (Exception e) {e.printStackTrace();}}//初始化控件private void init(){tv_main_title = (TextView) findViewById(R.id.tv_main_title);tv_back = (TextView) findViewById(R.id.tv_back);rl_title_bar = (RelativeLayout) findViewById(R.id.title_bar);rl_title_bar.setBackgroundColor(Color.parseColor("#30B4FF"));lv_list = (ListView)findViewById(R.id.lv_list);TextView tv = new TextView(this);tv.setTextColor(Color.parseColor("#000000"));tv.setTextSize(16.0f);tv.setText("第一部分、选择题(单选)");tv.setPadding(10,15,0,0);lv_list.addHeaderView(tv);tv_main_title.setText(title);tv_back.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){ExercisesDetailActivity.this.finish();}});adapter = new ExrecisesDetailAdapter(ExercisesDetailActivity.this,new ExrecisesDetailAdapter.OnSelectListener(){@Overridepublic void onSelectD(int postion, ImageView iv_a, ImageView iv_b, ImageView iv_c, ImageView iv_d){//判断如果答案不是4即D答案if (ebl.get(postion).answer != 4){ebl.get(postion).select=4;}else {ebl.get(postion).select = 0;}switch (ebl.get(postion).answer){case 1:iv_a.setImageResource(R.drawable.exercises_right_icon);iv_d.setImageResource(R.drawable.exercises_error_icon);break;case 2:iv_b.setImageResource(R.drawable.exercises_right_icon);iv_d.setImageResource(R.drawable.exercises_error_icon);break;case 3:iv_c.setImageResource(R.drawable.exercises_right_icon);iv_d.setImageResource(R.drawable.exercises_error_icon);break;case 4:iv_d.setImageResource(R.drawable.exercises_right_icon);break;}AnalysisUtils.setABCDEnable(false,iv_a,iv_b,iv_c,iv_d);}@Overridepublic void onSelectC(int postion, ImageView iv_a, ImageView iv_b, ImageView iv_c, ImageView iv_d){//判断如果答案不是3即C答案if (ebl.get(postion).answer != 3){ebl.get(postion).select=3;}else {ebl.get(postion).select = 0;}switch (ebl.get(postion).answer){case 1:iv_a.setImageResource(R.drawable.exercises_right_icon);iv_c.setImageResource(R.drawable.exercises_error_icon);break;case 2:iv_b.setImageResource(R.drawable.exercises_right_icon);iv_c.setImageResource(R.drawable.exercises_error_icon);break;case 3:iv_c.setImageResource(R.drawable.exercises_right_icon);break;case 4:iv_c.setImageResource(R.drawable.exercises_error_icon);iv_d.setImageResource(R.drawable.exercises_right_icon);break;}AnalysisUtils.setABCDEnable(false,iv_a,iv_b,iv_c,iv_d);}@Overridepublic void onSelectB(int postion, ImageView iv_a, ImageView iv_b, ImageView iv_c, ImageView iv_d){//判断如果答案不是2即B答案if (ebl.get(postion).answer != 2){ebl.get(postion).select=2;}else {ebl.get(postion).select = 0;}switch (ebl.get(postion).answer){case 1:iv_a.setImageResource(R.drawable.exercises_right_icon);iv_b.setImageResource(R.drawable.exercises_error_icon);break;case 2:iv_b.setImageResource(R.drawable.exercises_right_icon);break;case 3:iv_c.setImageResource(R.drawable.exercises_right_icon);iv_b.setImageResource(R.drawable.exercises_error_icon);break;case 4:iv_d.setImageResource(R.drawable.exercises_right_icon);iv_b.setImageResource(R.drawable.exercises_error_icon);break;}AnalysisUtils.setABCDEnable(false,iv_a,iv_b,iv_c,iv_d);}@Overridepublic void onSelectA(int postion, ImageView iv_a, ImageView iv_b, ImageView iv_c, ImageView iv_d){//判断如果答案不是1即A答案if (ebl.get(postion).answer != 1){ebl.get(postion).select=1;}else {ebl.get(postion).select = 0;}switch (ebl.get(postion).answer){case 1:iv_a.setImageResource(R.drawable.exercises_right_icon);break;case 2:iv_b.setImageResource(R.drawable.exercises_right_icon);iv_a.setImageResource(R.drawable.exercises_error_icon);break;case 3:iv_c.setImageResource(R.drawable.exercises_right_icon);iv_a.setImageResource(R.drawable.exercises_error_icon);break;case 4:iv_d.setImageResource(R.drawable.exercises_right_icon);iv_a.setImageResource(R.drawable.exercises_error_icon);break;}AnalysisUtils.setABCDEnable(false,iv_a,iv_b,iv_c,iv_d);}});adapter.setData(ebl);lv_list.setAdapter(adapter);}}

6、修改界面代码

(1)、修改习题界面数据适配器

找到ExercisesAdapter.java文件,在注释//跳转到习题详情界面下方添加如下代码:
Intent intent = new Intent(mContext, ExercisesDetailActivity.class);
ntent.putExtra("id",bean.id);
intent.putExtra("title",bean.title);
mContext.startActivity(intent);

(2)、设置A,B,C,D四个选项是否可以点击

找到AnalysisUtils.java文件,添加如下代码:
//设置A,B,C,D4个选项是否可以被点击
public static void setABCDEnable(boolean value, ImageView iv_a,ImageView iv_b, ImageView iv_c,ImageView iv_d){iv_a.setEnabled(value);
iv_b.setEnabled(value);
iv_c.setEnabled(value);
iv_d.setEnabled(value);}

三,运行效果

Android项目实战系列—基于博学谷 开源地址

               

Android项目实战系列—基于博学谷(六)习题模块相关推荐

  1. Android项目实战系列—基于博学谷(七)课程模块(上)

    由于这个模块内容较多,分为上.中.下 三篇博客分别来讲述,请耐心阅读. 课程模块分为四个部分 课程列表 课程详情 视频播放 播放记录 课程模块(上)主要讲述课程列表部分 一.水平滑动广告栏界面 1.创 ...

  2. android中私有方法 继承,Android项目实战系列—基于博学谷(五)个人资料

    由于这个模块内容较多,篇幅较长,请耐心阅读. 个人资料模块分为两个部分 [x] [个人资料]() [x] [资料修改]() 一.个人资料 1.个人资料界面 (1).创建个人资料界面 在com.buxu ...

  3. android注册文件打开,Android项目实战系列—基于博学谷(三)注册与登录模块

    由于这个模块内容较多,篇幅较长,请耐心阅读. 注册与登录模块分为三个部分 [x] [欢迎界面]() [x] [注册界面]() [x] [登录界面]() 一.欢迎界面 1.创建工程,命名为BoXueGu ...

  4. Android项目实战系列—基于博学谷(四)我的模块(上)

    由于这个模块内容较多,篇幅较长,请耐心阅读. "我"的模块分为四个部分 我的界面 设置界面 修改密码界面 设置密保和找回密码 一."我"的界面 1.底部导航栏 ...

  5. android博学谷布局,Android项目实战系列—基于博学谷(四)我的模块(下)

    image 由于这个模块内容较多,篇幅较长,请耐心阅读. "我"的模块分为四个部分 一.修改密码 1.创建修改密码界面 在com.boxuegu.activity包中,创建一个ja ...

  6. android博学谷实验报告,Android项目实战系列—基于博学谷(四)我的模块(上)...

    image 由于这个模块内容较多,篇幅较长,请耐心阅读. "我"的模块分为四个部分 一."我"的界面 1.底部导航栏 (1).导入界面图片 将底部导航栏所需图片 ...

  7. android项目实战博学谷百度云,Android项目实战系列—基于博学谷(七)课程模块(下)...

    由于这个模块内容较多,分为上.中.下 三篇博客分别来讲述,请耐心阅读. 课程模块分为四个部分 [ ] [课程列表]() [ ] [课程详情]() [x] [视频播放]() [x] [播放记录]() 课 ...

  8. android博学谷我的代码,Android项目实战系列—基于博学谷(四)我的模块(下)...

    由于这个模块内容较多,篇幅较长,请耐心阅读. "我"的模块分为四个部分 [ ] [我的界面]() [ ] [设置界面]() [x] [修改密码界面]() [x] [设置密保和找回密 ...

  9. Android项目实战系列—基于博学谷(五)个人资料

    由于这个模块内容较多,篇幅较长,请耐心阅读. 个人资料模块分为两个部分 个人资料 资料修改 一.个人资料 1.个人资料界面 (1).创建个人资料界面 在com.buxuegu.activity包中创建 ...

最新文章

  1. 谷歌排名第一的编程语言,死磕它这两点,小白也能学的会!不信你看!
  2. gitlab远程提交
  3. HDU4970 Killing Monsters dp
  4. c++中介者模式mediator
  5. akka2.5_播放2.0:Akka,Rest,Json和依赖项
  6. 计算机三级教材重点网络技术,2020年计算机三级网络技术知识点梳理:身份认证...
  7. bzoj 1041: [HAOI2008]圆上的整点
  8. os如何读取图片_CV:基于face库利用cv2调用摄像头根据人脸图片实现找人
  9. @PropertySource 解析 yml 配置文件,自定义解析 yaml 工厂类
  10. ZZULIOJ.1137: 查找最大元素
  11. 动规-Raucous Rockers
  12. 电子设计教程16:共射极放大电路
  13. Python批量复制文件夹及其内容、并按Excel表格遍历重命名文件夹
  14. 加大货币发行量 quantitative easing
  15. SOLO: Segmenting Objects by Locations 论文学习
  16. C10K 问题引发的技术变革
  17. ad被锁定的账户_【原创】解决AD账户被莫名其妙的锁定问题
  18. 分析谷歌收购摩托罗拉无线对移动产业带来的影响
  19. SQL 索引超详细解析
  20. 2018年的2108

热门文章

  1. 七年级计算机教案万能稿,人教版七年级信息技术上册《制作演示文稿》教案
  2. 数据生产要素背后的“芯”通用算力是什么?
  3. 用Vue写一个简单好看的菜单组件(Vue实战系列)
  4. 开着音箱骑车上下班有感
  5. 2019年猪年海报PSD模板-第三部分
  6. security❀javascript 2
  7. JS基础学习第六天:JavaScript对象入门(构造函数和实例对象)
  8. 灌区智能信息化管理系统解决方案
  9. 最新计算机等级考试无纸化模拟软件
  10. 排队叫号系统方案_财务处关于启用大厅排队叫号系统及自助报账投递机的通知...