基于eclipse的android項目實戰—博學谷(十二)習題詳情界面

 2023-10-24 阅读 25 评论 0

摘要:本項目是用eclipse軟件編寫,經過我的親自實踐,其真實有效,希望能給您有所幫助😘😘 項目版本:android5.1.1 AVD建議:android4.4.2及以上 若有不足之處或不對的地方,歡迎大佬們指點 BoXueGu源碼資源下載鏈接: h
本項目是用eclipse軟件編寫,經過我的親自實踐,其真實有效,希望能給您有所幫助😘😘
項目版本:android5.1.1
AVD建議:android4.4.2及以上
若有不足之處或不對的地方,歡迎大佬們指點

BoXueGu源碼資源下載鏈接:
https://download.csdn.net/download/hyh/19477319


BoXueGu圖片資源下載(免費):
https://yuyunyaohui.lanzoui.com/iWos0pyc4rc


習題詳情界面主要用于展示每章的所有選擇題,每道題由題干、A選項、B選項、 C選項、D選項組成,當用戶選擇某個選項后程序會自行判斷對錯,顯示正確答案(用戶選擇答案后不能重新進行選擇)

效果圖:

在這里插入圖片描述

1.導入界面圖片

將習題詳情界面所需圖片exercises_a.png, exercises_b.png
exercises_c.pngexercises_d.pngexercises _error_icon.pngexercises right icon.png 導入 drawable 文件夾中。

在這里插入圖片描述

2.新建建習題詳情界面布局文件activity_exercises_detail.xml

res/layout文件夾中新建activity_exercises_detail.xml文件,代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/white"android:orientation="vertical" ><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="@string/T_xuan"android:textColor="#000000"android:textSize="16sp"android:textStyle="bold"android:visibility="gone" /><ListViewandroid:id="@+id/lv_list"android:layout_width="fill_parent"android:layout_height="fill_parent"android:divider="@null" />
</LinearLayout>

在values文件夾下的string.xml文件里面輸入文本信息:

<string name="T_xuan">一 、選擇題</string>

3.習題詳情界面Item

每一個Item包含題干部分和四個選項,每個選項包含選項圖片和選項內容
res/layout文件夾中,創建一個布局文件exercises_detail_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" 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:contentDescription="@null"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:contentDescription="@null"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:contentDescription="@null"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:contentDescription="@null"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>

4.存放習題數據

assets文件夾中創建10個XML文件保存每章的習題內容。每個XML文件都包含習題 的Id、題干、選項內容及正確答案等信息。(沒有assets就新建一個)

選中assets文件夾,然后右擊并選擇【File】選項,創建一個XML文件,命名 為chapter1.xml,依此類推創建其余9個XML文件
在這里插入圖片描述
文件下載:https://yuyunyaohui.lanzous.com/i1slkjnh5od

chapter1.xml代碼如下:(其余九個我會在文章最后面貼出來,原本計劃貼在評論處的,奈何評論填不了這么多字)

<?xml version="1.0" encoding="UTF-8"?>
<infos><exercises id="1"><subject>1.Android安裝包文件簡稱APK,其后綴名是()。</subject><a>.exe</a><b>.txt</b><c>.apk</c><d>.app</d><answer>3</answer></exercises><exercises id="2"><subject>2.下列選項中不屬于ADT Bundle的是()。</subject><a>Eclipse</a><b>SDK</b><c>SDK Manager.exe</c><d>JDK</d><answer>4</answer></exercises><exercises id="3"><subject>3.應用程序層是一個核心應用程序的集合,主要包括()。</subject><a>活動管理器</a><b>短信程序</b><c>音頻驅動</c><d>Dalvik 虛擬機</d><answer>2</answer></exercises><exercises id="4"><subject>4.ADB 的常見指令中”列出所有設備“的指令是()。</subject><a>adb uninstall</a><b>adb install</b><c>adb device</c><d>adb emulator-avd</d><answer>3</answer></exercises><exercises id="5"><subject>5.創建程序時,填寫的Application Name表示()。</subject><a>應用名稱</a><b>項目名稱</b><c>項目的包名</c><d>類的名字</d><answer>1</answer></exercises>
</infos>

5.解析XML文件

AnalysisUtils.java文件里添加一個XML數據解析方法getExercisesInfos(),使用Pull解析方式對數據進行解析,具體代碼如下:

	/***解析每章的習題*/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;}/*** 設置A、B、C、D選項是否可點擊* 在習題詳情界面用戶點擊某一道題的選項之后會自動提示正確答案,并且做過的題不能重做*/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);}

6.習題詳情界面Adapter

創建一個數據適配器來對ListView進行數據填充。由于做過的習題不允許用戶重做,因此用ArrayList來記錄做過的習題位置。

china.ynyx.heyunhui.adapter包中創建一個 ExercisesDetailAdapter 類繼承 BaseAdapter
在這里插入圖片描述
具體代碼如下:ExercisesDetailAdapter.java

package china.ynyx.heyunhui.adapter;import java.util.ArrayList;
import java.util.List;import android.content.Context;
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 china.ynyx.heyunhui.R;
import china.ynyx.heyunhui.bean.ExercisesBean;
import china.ynyx.heyunhui.utils.AnalysisUtils;public class ExercisesDetailAdapter extends BaseAdapter {private Context mContext;private List<ExercisesBean> ebl;private OnSelectListener onSelectListener;public ExercisesDetailAdapter(Context context,OnSelectListener onSelectListener) {this.mContext = context;this.onSelectListener = onSelectListener;}public void setData(List<ExercisesBean> ebl) {this.ebl = ebl;notifyDataSetChanged();}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn ebl == null ? 0 : ebl.size();}@Overridepublic ExercisesBean getItem(int position) {// TODO Auto-generated method stubreturn ebl == null ? null : ebl.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}private ArrayList<String> selectedPosition = new ArrayList<String>();//記錄點擊的位置@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubfinal 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是錯誤的* 當用戶選擇A選 項之后首先將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是錯誤的* 當用戶選擇B選 項之后首先將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是錯誤的* 當用戶選擇C選 項之后首先將B選項之前的圖標設為紅色,之后將正確選項的圖標設為綠色*/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是錯誤的* 當用戶選擇D選 項之后首先將B選項之前的圖標設為紅色,之后將正確選項的圖標設為綠色*/vh.iv_d.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) {//判斷selectedPosition中是否包含此時點擊的positonif (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.onSelectB(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.onSelectC(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.onSelectD(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);}
}

7.習題詳情界面邏輯代碼

在習題列表界面中,點擊任意一個條目就會跳轉到習題詳情界面并顯示對應章的習 題,在這個跳轉的過程中,需要從習題界面獲取傳遞過來的章節Id和Title

china.ynyx.heyunhui.activity包中創建一個 ExercisesDetailActivity 類繼承 Activity
具體代碼如下:ExercisesDetailActivity.java

package china.ynyx.heyunhui.activity;import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;import android.support.v7.app.AppCompatActivity;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import china.ynyx.heyunhui.R;
import china.ynyx.heyunhui.adapter.ExercisesDetailAdapter;
import china.ynyx.heyunhui.bean.ExercisesBean;
import china.ynyx.heyunhui.utils.AnalysisUtils;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 ExercisesDetailAdapter 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 ExercisesDetailAdapter(ExercisesDetailActivity.this,new ExercisesDetailAdapter.OnSelectListener() {@Overridepublic void onSelectD(int position, ImageView iv_a,ImageView iv_b, ImageView iv_c, ImageView iv_d) {//判斷如果答案不是4即D選項if (ebl.get(position).answer != 4) {ebl.get(position).select=4;} else {ebl.get(position).select=0;}switch (ebl.get(position).answer) {case 1:iv_a.setImageResource(R.drawable.exercises_right_icon);iv_d.setImageResource(R.drawable.exercises_error_icon);break;case 2:iv_d.setImageResource(R.drawable.exercises_error_icon);iv_b.setImageResource(R.drawable.exercises_right_icon);break;case 3:iv_d.setImageResource(R.drawable.exercises_error_icon);iv_c.setImageResource(R.drawable.exercises_right_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 position, ImageView iv_a,ImageView iv_b, ImageView iv_c, ImageView iv_d) {//判斷如果答案不是3即C選項if (ebl.get(position).answer != 3) {ebl.get(position).select=3;} else {ebl.get(position).select=0;}switch (ebl.get(position).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 position, ImageView iv_a,ImageView iv_b, ImageView iv_c, ImageView iv_d) {//判斷如果答案不是2即B選項if (ebl.get(position).answer != 2) {ebl.get(position).select=2;} else {ebl.get(position).select=0;}switch (ebl.get(position).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_b.setImageResource(R.drawable.exercises_error_icon);iv_c.setImageResource(R.drawable.exercises_right_icon);break;case 4:iv_b.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 onSelectA(int position, ImageView iv_a,ImageView iv_b, ImageView iv_c, ImageView iv_d) {//判斷如果答案不是1即A選項if (ebl.get(position).answer != 1) {ebl.get(position).select=1;} else {ebl.get(position).select=0;}switch (ebl.get(position).answer) {case 1:iv_a.setImageResource(R.drawable.exercises_right_icon);break;case 2:iv_a.setImageResource(R.drawable.exercises_error_icon);iv_b.setImageResource(R.drawable.exercises_right_icon);break;case 3:iv_a.setImageResource(R.drawable.exercises_error_icon);iv_c.setImageResource(R.drawable.exercises_right_icon);break;case 4:iv_a.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);}});adapter.setData(ebl);lv_list.setAdapter(adapter);}
}

8.修改習題界面數據適配器

由于習題詳情界面是通過習題界面數據適配器跳轉的,因此需要找到ExercisesAdapter.java文件中的getView()方法,在注釋“//跳轉到習題詳情界面”下方添加如下代碼:

Intent intent = new Intent(mContext,ExercisesDetailActivity.class);
//把章節Id傳遞到習題詳情頁面
intent.putExtra("id", bean.id);
//把標題傳遞到習題詳情頁面
intent.putExtra("title", bean.title);
mContext.startActivity(intent);

在這里插入圖片描述

9.修改AndroidManifest.xml清單文件

最后的最后,別忘了在AndroidManifest.xml清單文件中注冊:

<activity android:name="china.ynyx.heyunhui.activity.ExercisesDetailActivity"></activity>

10.補充

chapter2.xml

<?xml version="1.0" encoding="UTF-8"?>
<infos><exercises id="1"><subject>1.以下屬性中,哪個屬性可以“在指定控件左邊”是()。</subject><a>android:layout_alignLeft</a><b>android:layout_alignParentLeft</b><c>android:layout_Left</c><d>android:layout_toLeftOf</d><answer>4</answer></exercises><exercises id="2"><subject>2.表格布局中android:layout_column屬性的作用是指定()。</subject><a>行數</a><b>列數</b><c>總行數</c><d>總列數</d><answer>4</answer></exercises><exercises id="3"><subject>3.實際開發中刮刮樂游戲的布局是按照()布局寫的。</subject><a>相對布局</a><b>線性布局</b><c>幀布局</c><d>絕對布局</d><answer>3</answer></exercises><exercises id="4"><subject>4.網格布局是Android()新增的布局。</subject><a>3.0</a><b>3.1</b><c>3.2</c><d>4.0</d><answer>4</answer></exercises><exercises id="5"><subject>5.相對布局中,“是否跟父布局對齊”是屬性()。</subject><a>android:layout_alignBottom</a><b>android:layout_alignParentBottom</b><c>android:layout_alignBaseline</c><d>android:layout_below</d><answer>3</answer></exercises>
</infos>

chapter3.xml

<?xml version="1.0" encoding="UTF-8"?>
<infos><exercises id="1"><subject>1.一個應用程序默認會包含()個Activity。</subject><a>1個</a><b>5個</b><c>10個</c><d>若干個</d><answer>1</answer></exercises><exercises id="2"><subject>2.下列方法中,Activity從啟動到關閉不會執行的是()。</subject><a>onCreate()</a><b>onStart()</b><c>onResume()</c><d>onRestart()</d><answer>4</answer></exercises><exercises id="3"><subject>3.下列組件中,不能使用Intent啟動的是()。</subject><a>Activity</a><b>啟動服務</b><c>廣播</c><d>內容提供者</d><answer>4</answer></exercises><exercises id="4"><subject>4.startActivityForResult()方法接收兩個參數,第一個是Intent,第二個是()。</subject><a>resultCode</a><b>requestCode</b><c>請求碼</c><d>data</d><answer>3</answer></exercises><exercises id="5"><subject>5.下列關于Activity的描述,錯誤的是()。</subject><a>Activity是Android四大組件之一</a><b>Activity有四種啟動模式</b><c>Activity通常用于開啟一個廣播事件</c><d>Activity就像一個界面管理員,用戶在界面上的操作是通過Activity來管理</d><answer>3</answer></exercises>
</infos>

chapter4.xml

<?xml version="1.0" encoding="UTF-8"?>
<infos><exercises id="1"><subject>1.下列文件操作權限中,指定文件內容可以追加的是()。</subject><a>MODE_PRIVATE</a><b>MODE_WORLD_READABLE</b><c>MODE_APPEND</c><d>MODE_WORLD_WRITEABLE</d><answer>3</answer></exercises><exercises id="2"><subject>2.下列代碼中,用于獲取SD卡路徑的是()。</subject><a>Environment.getSD();</a><b>Environment.getExternalStorageState();</b><c>Environment.getSD Directory();</c><d>Environment.getExternalStorageDirectory();</d><answer>4</answer></exercises><exercises id="3"><subject>3.下列選項中,關于文件存儲數據的說法錯誤的是()。</subject><a>文件存儲是以流的形式來操作數據的</a><b>文件存儲可以講數據存儲到SD卡中</b><c>文件存儲可以講數據存儲到內存中</c><d>Android中只能使用文件存儲數據</d><answer>4</answer></exercises><exercises id="4"><subject>4.下列選項中,關于XML序列化和解析描述合理的是()。</subject><a>DOM解析會將XML文件的所有內容以文檔樹方式存放在內存中</a><b>在序列化對象時,需要使用XmlSerialize序列化器,即XmlSerializer類</b><c>XmlSerializer類的startDocument()方法用于寫入序列號的開始節點</c><d>XmlSerializer類的startTag()方法用于設置文件的編碼方式</d><answer>2</answer></exercises><exercises id="5"><subject>5.如果要將程序中的私有數據分享給其他應用程序,可以使用的是()。</subject><a>文件存儲</a><b>SharedPreferences</b><c>ContentProvider</c><d>SQLite</d><answer>3</answer></exercises>
</infos>

chapter5.xml

<?xml version="1.0" encoding="UTF-8"?>
<infos><exercises id="1"><subject>1.使用SQLite數據庫進行查詢后,必須要做的操作是()。</subject><a>關閉數據庫</a>                                     <b>直接退出</b><c>關閉Cursor</c><d>AC都是</d><answer>4</answer></exercises><exercises id="2"><subject>2.使用SQLiteOpenHelper類可以生成一個數據庫并可以對數據庫版本進行管理的方法()。</subject><a>getDatabase()</a><b>getWriteableDatabase()</b><c>getWriteable()</c><d>getAbleDatabase()</d><answer>2</answer></exercises><exercises id="3"><subject>3.下列命令中,屬于SQLite下的命令是()。</subject><a>shell</a><b>push</b><c>quit</c><d>keytool</d><answer>2</answer></exercises><exercises id="4"><subject>4.下列關于ListView使用的描述中,不正確的是()。</subject><a>要使用ListView,必須為該ListView使用Adapter方式傳遞數據</a><b>要使用ListView,該布局文件對應的Activity必須繼承ListActivity</b><c>ListView中每一項的視圖布局既可以使用內置的布局,也可以使用自定義的布局方式</c><d>ListView中每一項被選中時,將會出發ListView對象的ItemClick事件</d><answer>3</answer></exercises><exercises id="5"><subject>5.關于適配的說法正確的是()。</subject><a>它主要用來存儲數據</a><b>它主要用來把數據綁定在組件上</b><c>它主要用來存儲XML數據</c><d>它主要用來解析數據</d><answer>2</answer></exercises>
</infos>

chapter6.xml

<?xml version="1.0" encoding="UTF-8"?>
<infos><exercises id="1"><subject>1.下列選項中,屬于Android中四大組件的是()。</subject><a>Activity</a><b>ContentReceiver</b><c>Service</c><d>ABC都是</d><answer>4</answer></exercises><exercises id="2"><subject>2.下列關于ContentResolver的描述,錯誤的是()。</subject><a>可以操作數據庫數據</a><b>操作其他應用數據必須知道包名</b><c>只能操作ContentProvider暴漏的數據</c><d>可以操作ContentProvider的任意數據</d><answer>3</answer></exercises><exercises id="3"><subject>3.下列關于內容提供者的描述,不正確的是()。</subject><a>提供的	Uri必須符合規范</a><b>可以提供本應用所有數據供別人訪問</b><c>必須在清單文件中注冊</c><d>authorities屬性必須和包名一致</d><answer>2</answer></exercises><exercises id="4"><subject>4.繼承ContentProvider類不需要重寫的方法是()。</subject><a>delete()</a><b>insert()</b><c>onStart()</c><d>onUpdate()</d><answer>3</answer></exercises><exercises id="5"><subject>5.下列關于內容觀察者的說法,正確的是()。</subject><a>可以觀察任何數據</a><b>觀察其他應用數據需要權限</b><c>只能觀察到指定Uri的數據</c><d>觀察其他應用數據必須在清單文件中注冊</d><answer>3</answer></exercises>
</infos>

chapter7.xml

<?xml version="1.0" encoding="UTF-8"?>
<infos><exercises id="1"><subject>1.繼承BroadcastReceiver會重寫哪一個方法()。</subject><a>onReceiver()</a><b>onUpdate()</b><c>onCreate()</c><d>onStart()</d><answer>1</answer></exercises><exercises id="2"><subject>2.關于廣播的作用,說法正確的是()。</subject><a>它主要用來接收系統發布的一些消息的</a><b>它可以進行耗時的操作</b><c>它可以啟動一個Activity</c><d>它可以幫助Actvity修改用戶界面</d><answer>1</answer></exercises><exercises id="3"><subject>3.下列方法中,用于發送一條有序廣播的是()。</subject><a>startBroadcastReceiver()</a><b>sendOrderedBroadcast()</b><c>sendBroadcast()</c><d>sendReceiver()</d><answer>2</answer></exercises><exercises id="4"><subject>4.在清單文件中,注冊廣播時使用的節點是()。</subject><a>activity</a><b>broadcast</b><c>receiver</c><d>broadcastreceiver</d><answer>3</answer></exercises><exercises id="5"><subject>5.關于BroadcastReceiver說法不正確的是()。</subject><a>是用來接收廣播Intent的</a><b>一個廣播Intent只能被一個訂閱了此廣播的BroadcastReceiver所接收</b><c>對有序廣播,系統會根據接收者聲明的優先級別按順序逐個執行接收者</c><d>接收者聲明的優先級別在android:priority屬性中聲明,數值越大優先級別越高</d><answer>2</answer></exercises>
</infos>

chapter8.xml

<?xml version="1.0" encoding="UTF-8"?>
<infos><exercises id="1"><subject>1.每一次啟動服務都會調用什么方法()。</subject><a>onCreate()</a><b>onStart()</b><c>onResume()</c><d>onStartCommand()</d><answer>4</answer></exercises><exercises id="2"><subject>2.下列選項中,不屬于綁定服務的特點的是()。</subject><a>以bindService()方法開啟</a><b>調用者關閉后服務關閉</b><c>必須實現ServiceConnection()</c><d>使用stopService()方法關閉服務</d><answer>4</answer></exercises><exercises id="3"><subject>3.Service與Activity的共同點是()。</subject><a>都是四大組件之一</a><b>都有onResume()方法</b><c>都不可以被遠程調用</c><d>都可以自定義美觀界面</d><answer>1</answer></exercises><exercises id="4"><subject>4.下列方法中,不屬于Service生命周期的是()。</subject><a>onResume()</a><b>onStart()</b><c>onStop()</c><d>onDestory</d><answer>1</answer></exercises><exercises id="5"><subject>5.關于Service生命周期的onCreate()和onStart()方法,說法正確的是()。</subject><a>如果Service已經啟動,將先后調用onCreate()和onStart()方法</a><b>如果Service已經啟動,只會執行onCreate()方法</b><c>當第一次啟動的時候只會調用onCreate()方法</c><d>如果Service已經啟動,只會執行onStart()方法,不再執行onCreate()方法</d><answer>4</answer></exercises>
</infos>

chapter9.xml

<?xml version="1.0" encoding="UTF-8"?>
<infos><exercises id="1"><subject>1.下列選項中,不屬于Handler機制中的關鍵對象的是()。</subject><a>Content</a><b>Handler</b><c>MessageQueue</c><d>Looper</d><answer>1</answer></exercises><exercises id="2"><subject>2.下列通訊方式中,不是Android系統提供的是()。</subject><a>Socket通信</a><b>HTTP通信</b><c>URL通信</c><d>以太網通信</d><answer>4</answer></exercises><exercises id="3"><subject>3.關于HttpURLConnection訪問網絡的基本用法,描述錯誤的是()。</subject><a>HttpURLConnection對象需要設置請求網絡的方式</a><b>HttpURLConnection對象需要設置超時時間</b><c>需要通過new關鍵字來創建HttpURLConnection對象</c><d>訪問網絡完畢需要關閉http鏈接</d><answer>3</answer></exercises><exercises id="4"><subject>4.下列選項中,不屬于AsyncHttpClient特點的是()。</subject><a>發送異步HTTP請求</a><b>HTTP請求發生在UI線程之外</b><c>內部采用了線程池來處理并發請求</c><d>自動垃圾回收</d><answer>4</answer></exercises><exercises id="5"><subject>5.下列選項中,關于GET和POST請求方式,描述錯誤的是()。</subject><a>使用GET方式訪問網絡URL的長度是有限制的</a><b>HTTP協議規定GET方式請求URL的長度不超過2k</b><c>POST方式對URL的長度是沒有限制的</c><d>GET請求方式向服務器提交的參數跟在請求URL后面</d><answer>2</answer></exercises>
</infos>

chapter10.xml

<?xml version="1.0" encoding="UTF-8"?>
<infos><exercises id="1"><subject>1.使用MediaPlayer播放保存在sdcard上的mp3文件時()。</subject><a>需要使用MediaPlayer.create方法創建MediaPlayer</a><b>不能直接new MediaPlayer即可</b><c>直接使用setDataSource方法設置文件源</c><d>直接調用start方法,無需設置文件源</d><answer>3</answer></exercises><exercises id="2"><subject>2.下列不屬于補間動畫相關的類是()。</subject><a>TranslateAnimation</a><b>FrameAnimation</b><c>RotateAnimation</c><d>AlphaAnimation</d><answer>2</answer></exercises><exercises id="3"><subject>3.有關于Fragment說法正確的是()。</subject><a>使用Fragment必須在布局文件中加入fragment控件</a><b>Fragment有自己的界面和生命周期,可以完全替代Activity</b><c>Fragment的狀態跟隨它所關聯的Activity的狀態改變而改變</c><d>當Fragment停止時,與它關聯的Activity也會停止</d><answer>3</answer></exercises><exercises id="4"><subject>4.MediaPlayer播放資源前,需要調用哪個方法完成準備工作()。</subject><a>setDataSource</a><b>prepare</b><c>begin</c><d>pause</d><answer>2</answer></exercises><exercises id="5"><subject>5.下面屬于Android動畫分類的有()。</subject><a>Tweens</a><b>Frame</b><c>Draw</c><d>Animation</d><answer>2</answer></exercises>
</infos>

參考資料:《android項目實戰——博學谷》(黑馬程序員著)


基于eclipse的android項目實戰—博學谷(零)創建和運行Android項目
基于eclipse的android項目實戰—博學谷(一)歡迎界面
基于eclipse的android項目實戰—博學谷(二)注冊界面
基于eclipse的android項目實戰—博學谷(三)登錄界面
基于eclipse的android項目實戰—博學谷(四)底部導航欄
基于eclipse的android項目實戰—博學谷(五)“我”的模塊
基于eclipse的android項目實戰—博學谷(六)設置界面
基于eclipse的android項目實戰—博學谷(七)修改密碼
基于eclipse的android項目實戰—博學谷(八)設置密保和找回密碼
基于eclipse的android項目實戰—博學谷(九)個人資料界面
基于eclipse的android項目實戰—博學谷(十)個人資料修改
基于eclipse的android項目實戰—博學谷(十 一)習題界面
基于eclipse的android項目實戰—博學谷(十二)習題詳情界面
基于eclipse的android項目實戰—博學谷(十三)水平滑動廣告欄界面
基于eclipse的android項目實戰—博學谷(十四)課程界面
基于eclipse的android項目實戰—博學谷(十五)課程詳情界面
基于eclipse的android項目實戰—博學谷(十六)視頻播放界面
基于eclipse的android項目實戰—博學谷(十七)播放記錄界面
基于eclipse的android項目實戰—博學谷(十八)播放不同視頻(網絡視頻)
基于eclipse的android項目實戰—博學谷(十九)播放不同視頻(本地視頻)

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/165346.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息