日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

android笔试添加自定义服务,Android之Listview(item为单选题)自定义adapter,像考试时前面的10几道单选题的实现...

發(fā)布時(shí)間:2024/9/27 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android笔试添加自定义服务,Android之Listview(item为单选题)自定义adapter,像考试时前面的10几道单选题的实现... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

用于展現(xiàn)重復(fù)性的東西,Listview比較好用,看了別人的自定義Adapter(item是EditText,能夠很好地獲取到每一個(gè)item的EditText值)。又由于在做項(xiàng)目的需要,故特制了一個(gè)item包含RadioGroup的Listview的自定義Adapter。

主要功能:

1.將任意數(shù)目的單選題(題干和4個(gè)選項(xiàng))展現(xiàn)在界面上;

2.每一題都選擇后,提交,可以講每一題的答案獲取到

涉及到兩個(gè)entity:

public class TopicItem implements Serializable {

private String questionId;//題目id

private String question;//題干

private String answerId;

private String userAnswerId; //選擇的答案選項(xiàng)

private List optionList;

public String getQuestionId() {

return questionId;

}

public void setQuestionId(String questionId) {

this.questionId = questionId;

}

public String getQuestion() {

return question;

}

public void setQuestion(String question) {

this.question = question;

}

public String getAnswerId() {

return answerId;

}

public void setAnswerId(String answerId) {

this.answerId = answerId;

}

public String getUserAnswerId() {

return userAnswerId;

}

public void setUserAnswerId(String userAnswerId) {

this.userAnswerId = userAnswerId;

}

public List getOptionList() {

return optionList;

}

public void setOptionList(List optionList) {

this.optionList = optionList;

}

}

public class OptionItem implements Serializable {

private String answerOption;//選項(xiàng)序號(hào)

private String answer;//選項(xiàng)文字

public String getAnswerOption() {

return answerOption;

}

public void setAnswerOption(String answerOption) {

this.answerOption = answerOption;

}

public String getAnswer() {

return answer;

}

public void setAnswer(String anwer) {

this.answer = anwer;

}

}

自定義的adapter:

public class TopicAdapter extends BaseAdapter {

private static final String TAG = "TopicAdapter" ;

String KEY = "list_topic_item";

private LayoutInflater mInflater;

private Context context;

private List> mData;

public TopicAdapter(Context context, List> data) {

mData = data;

mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

this.context = context;

init();

}

private void init() {

mData.clear();

}

@Override

public int getCount() {

int count = mData == null ? 0 : mData.size();

return count ;

}

@Override

public Object getItem(int position) {

/*Object obj = records != null && records.size() > position ? records.get(position) : null;

return obj;*/

return null;

}

@Override

public long getItemId(int position) {

//return position;

return 0;

}

private Integer index = -1;

@Override

public View getView(final int position, View convertView, ViewGroup parent) {

Holder holder = null;

if( convertView == null ){

convertView = mInflater.inflate(R.layout.topic_item, null);

holder = new Holder() ;

holder.question = (TextView)convertView.findViewById(R.id.topic_item_question);

holder.option = (RadioGroup) convertView.findViewById(R.id.topic_item_option);

holder.option1 = (RadioButton) convertView.findViewById(R.id.topic_item_option1);

holder.option2 = (RadioButton) convertView.findViewById(R.id.topic_item_option2);

holder.option3 = (RadioButton) convertView.findViewById(R.id.topic_item_option3);

holder.option4 = (RadioButton) convertView.findViewById(R.id.topic_item_option4);

holder.option.setTag(position);

holder.option.setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_UP) {

index = (Integer) v.getTag();

}

return false;

}

});

class MyOnCheckedChangeListener implements RadioGroup.OnCheckedChangeListener {

public MyOnCheckedChangeListener(Holder holder) {

mHolder = holder;

}

private Holder mHolder;

@Override

public void onCheckedChanged(RadioGroup group, int checkedId) {

// TODO Auto-generated method stub

int position = (Integer) mHolder.option.getTag();

TopicItem item = mData.get(position).get(KEY);

int RadioButtonId = mHolder.option.getCheckedRadioButtonId();

group.check(RadioButtonId);

RadioButton rb = (RadioButton)mHolder.option.findViewById(RadioButtonId);

if(RadioButtonId==mHolder.option1.getId()){

item.setUserAnswerId(item.getOptionList().get(0).getAnswerOption().trim());

}else if(RadioButtonId==mHolder.option2.getId()){

item.setUserAnswerId(item.getOptionList().get(1).getAnswerOption().trim());

}else if(RadioButtonId==mHolder.option3.getId()){

item.setUserAnswerId(item.getOptionList().get(2).getAnswerOption().trim());

}else if(RadioButtonId==mHolder.option4.getId()){

item.setUserAnswerId(item.getOptionList().get(3).getAnswerOption().trim());

}

mData.get(position).put(KEY, item);

}

}

holder.option.setOnCheckedChangeListener(new MyOnCheckedChangeListener(holder));

convertView.setTag(holder);

}else{

holder = (Holder)convertView.getTag();

holder.option.setTag(position);

}

TopicItem item = (TopicItem)mData.get(position).get(KEY);

if( item != null ){

holder.question.setText(item.getQuestion());

holder.option1.setText(item.getOptionList().get(0).getAnswer().toString());

holder.option2.setText(item.getOptionList().get(1).getAnswer().toString());

holder.option3.setText(item.getOptionList().get(2).getAnswer().toString());

holder.option4.setText(item.getOptionList().get(3).getAnswer().toString());

if(item.getUserAnswerId().trim().equalsIgnoreCase(item.getOptionList().get(0).getAnswerOption().trim())){

holder.option.check(holder.option1.getId());

}

else if(item.getUserAnswerId().trim().equalsIgnoreCase(item.getOptionList().get(1).getAnswerOption().trim())){

holder.option.check(holder.option2.getId());

}else if(item.getUserAnswerId().trim().equalsIgnoreCase(item.getOptionList().get(2).getAnswerOption().trim())){

holder.option.check(holder.option3.getId());

}else if(item.getUserAnswerId().trim().equalsIgnoreCase(item.getOptionList().get(3).getAnswerOption().trim())){

holder.option.check(holder.option4.getId());

}

}

holder.option.clearFocus();

if (index != -1 && index == position) {

holder.option.requestFocus();

}

return convertView;

}

private class Holder{

private TextView question;

private RadioGroup option;

private RadioButton option1;

private RadioButton option2;

private RadioButton option3;

private RadioButton option4;

}

}

應(yīng)用步驟:

1.定義一些變量,為后面做準(zhǔn)備

//Adapter需要該Activity的context

public Context context;

private ListView topic_listview;

private Button button_sent;

private BaseAdapter mAdapter;

//需要將題目數(shù)據(jù)存在Map中,多個(gè)Map組成list,并傳給Adapter

//一道題對(duì)應(yīng)一個(gè)Map

private List> data = new ArrayList>();

//模擬http獲取到的Json類(lèi)型的數(shù)據(jù)

JSONObject data_json;

//Map存入數(shù)據(jù)時(shí)的key

String KEY = "list_topic_item";

2.初始化題目數(shù)據(jù),這里直接本地編了幾道題,可以從服務(wù)器上獲取

private void initData(){

try {

data_json = new JSONObject();

data_json.put("result", "success");

JSONArray array = new JSONArray();

for(int i=0;i<3;i++){

JSONObject object = new JSONObject();

object.put("questionId", "1");

object.put("question", "康熙是乾隆的誰(shuí)?");

object.put("answerId", "");

//一開(kāi)始選擇好第三項(xiàng)

object.put("userAnswerId", "3");

JSONArray sarray = new JSONArray();

JSONObject sobject1 = new JSONObject();

sobject1.put("answerOption", "1");

sobject1.put("answer", "兒子");

sarray.put(sobject1);

JSONObject sobject2 = new JSONObject();

sobject2.put("answerOption", "2");

sobject2.put("answer", "爺爺");

sarray.put(sobject2);

JSONObject sobject3 = new JSONObject();

sobject3.put("answerOption", "3");

sobject3.put("answer", "父親");

sarray.put(sobject3);

JSONObject sobject4 = new JSONObject();

sobject4.put("answerOption", "4");

sobject4.put("answer", "孫子");

sarray.put(sobject4);

object.put("optionList", sarray);

array.put(object);

}

data_json.put("list", array);

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

3.將Listview與自定義的TopicAdapter關(guān)聯(lián)起來(lái)

this.context = this;

//獲取Listview

topic_listview = (ListView)findViewById(R.id.topic_quest_answer);

//data是題目的數(shù)據(jù),放在Map里

mAdapter = new TopicAdapter(context, data);

topic_listview.setAdapter(mAdapter);

4.將Json中的題目數(shù)據(jù)解析并放入data,更新給Adapter,這樣關(guān)聯(lián)的Listview此時(shí)才將數(shù)據(jù)顯示出來(lái)

private void getData(){

System.out.println(data_json.toString());

data.clear();

if(data_json.optString("result").equals("success")){

if(data_json.optJSONArray("list")!=null){

for(int i=0;i

JSONObject object = data_json.optJSONArray("list").optJSONObject(i);

TopicItem topic = new TopicItem();

topic.setAnswerId(object.optString("answerId"));

topic.setQuestionId(object.optString("questionId"));

topic.setQuestion(object.optString("question"));

topic.setUserAnswerId(object.optString("userAnswerId"));

List optionList = new ArrayList();

for(int j=0;j

JSONObject object_option = object.optJSONArray("optionList").optJSONObject(j);

OptionItem option = new OptionItem();

option.setAnswerOption(object_option.optString("answerOption"));

option.setAnswer(object_option.optString("answer"));

optionList.add(option);

}

topic.setOptionList(optionList);

Map list_item = new HashMap();

list_item.put(KEY, topic);

data.add(list_item);

}

//提醒Adapter更新數(shù)據(jù),緊接著Listview顯示新的數(shù)據(jù)

mAdapter.notifyDataSetChanged();

}

}

}

5.用戶(hù)答題,提交題目的答案時(shí),我們可以看到所有的題目及選擇的選項(xiàng):

button_sent = (Button) findViewById(R.id.topic_sent_comment);

button_sent.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

String t="";

for (int i = 0; i < data.size(); i++) {

t = t+"第 "+(i+1)+" 題 ----------->您選擇了【選項(xiàng)"

+data.get(i).get(KEY).getUserAnswerId().trim()+"】 \n";

}

Toast.makeText(context, t, Toast.LENGTH_SHORT).show();

}

});

接下來(lái),我們來(lái)看具體運(yùn)行情況:

a.

每一題我設(shè)選項(xiàng)都是第三項(xiàng),object.put(“userAnswerId”, “3”);

b.

接下來(lái)人工選擇,分別為4,3,2項(xiàng)

c.提交,可以看到提取結(jié)果正確

這里想提供一個(gè)demo,不知道怎么上傳。

demo地址

以前不知道怎么傳,現(xiàn)在補(bǔ)上

總結(jié)

以上是生活随笔為你收集整理的android笔试添加自定义服务,Android之Listview(item为单选题)自定义adapter,像考试时前面的10几道单选题的实现...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。