一、
使用LayoutInflater布局扩展,它的作用类似于findViewById(),不同点是LayoutInflater是用来找layout下xml布局文件,并且实例化,而findViewById()是找具体xml下的具体 widget控件。通过该类可以获得固定控件,让实现方式更方便简单。
我们写一个radiobutton.xml
- <?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="fill_parent"
- >
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
- <TextView
- android:id="@+id/tv"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="#ffffff"
- android:textSize="20sp" />
- <RadioGroup android:id="@+id/rg"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="#ffffff">
- <RadioButton
- android:id="@+id/a"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="A" />
- <RadioButton
- android:id="@+id/b"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="B" />
- <RadioButton
- android:id="@+id/c"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="C" />
- <RadioButton
- android:id="@+id/d"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="D" />
- </RadioGroup>
- </LinearLayout>
- </LinearLayout>
二、
在创建列表ListView时使用了两种适配器Adapter。一个是系统自带的SimpleAdapter,扩展性最好,可以定义各种各样的布局出来,放上了ImageView(图片)。另一个是自己定义的ListViewAdapter,它继承于BaseAdapter,通过编写里面必须实现的方法来实现多个RaddioButton的选择列表。
- package com.xc.media;
- import java.util.ArrayList;
- import java.util.HashMap;
- import android.content.Context;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.RadioButton;
- import android.widget.RadioGroup;
- import android.widget.TextView;
- public class ListViewAdapter extends BaseAdapter{
- private Context context;
- private HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();;
- // private ArrayList<Integer> state = new ArrayList<Integer>();
- ArrayList<String> choices;
- private int num;
- RadioButton a,b,c,d;
- RadioGroup rg;
- TextView tv;
- int p;
- public ListViewAdapter(Context context, ArrayList<String> choices) {
- this.context = context;
- this.choices = choices;
- }
- public void setNumList(int n) {
- //设置要显示多少行
- num = n;
- }
- public int getCount() {
- return num;
- }
- public Object getItem(int position) {
- return position;
- }
- public long getItemId(int position) {
- return position;
- }
- public HashMap<Integer, Integer> getState() {
- return map;
- }
- public int getPosition(){
- return p;
- }
- public View getView(int position, View convertView, ViewGroup parent) {
- p = position;
- final int selectId = position;
- convertView = LayoutInflater.from(context).inflate(R.layout.radiobutton, null);
- tv = (TextView)convertView.findViewById(R.id.tv);
- a = (RadioButton)convertView.findViewById(R.id.A);
- b = (RadioButton)convertView.findViewById(R.id.B);
- c = (RadioButton)convertView.findViewById(R.id.C);
- d = (RadioButton)convertView.findViewById(R.id.D);
- rg = (RadioGroup)convertView.findViewById(R.id.rg);
- tv.setText(choices.get(position*6));
- a.setText(choices.get(position*6+1));
- c.setText(choices.get(position*6+2));
- b.setText(choices.get(position*6+3));
- d.setText(choices.get(position*6+4));
- rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
- public void onCheckedChanged(RadioGroup group, int checkedId) {
- // group.getCheckedRadioButtonId();
- for(int z=0;z<group.getChildCount();z++) {
- RadioButton choiseButton = (RadioButton) group.getChildAt(z);
- if(choiseButton.getId()== checkedId) {
- if(!map.containsKey(selectId)){
- map.put(selectId, z);
- }
- else {
- map.remove(selectId);
- map.put(selectId, z);
- }
- }
- }
- }
- });
- return convertView;
- }
- }
public void setNumList(int n) { //设置要显示多少行 num = n; }
这是显示出多个RadioButton的关键点。
通过
convertView = LayoutInflater.from(context).inflate(R.layout.radiobutton, null); tv = (TextView)convertView.findViewById(R.id.tv); a = (RadioButton)convertView.findViewById(R.id.A); b = (RadioButton)convertView.findViewById(R.id.B); c = (RadioButton)convertView.findViewById(R.id.C); d = (RadioButton)convertView.findViewById(R.id.D); rg = (RadioGroup)convertView.findViewById(R.id.rg);
一系列代码来获取radiobutton.xml中的控件。