一、

使用LayoutInflater布局扩展,它的作用类似于findViewById(),不同点是LayoutInflater是用来找layout下xml布局文件,并且实例化而findViewById()是找具体xml下的具体 widget控件。通过该类可以获得固定控件,让实现方式更方便简单。

 

我们写一个radiobutton.xml

 

 
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:orientation="horizontal" 
  4.     android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent" 
  6.     > 
  7.       
  8.           
  9.  
  10.         <LinearLayout 
  11.             android:layout_width="wrap_content" 
  12.             android:layout_height="wrap_content" 
  13.             android:orientation="vertical" > 
  14.             <TextView 
  15.             android:id="@+id/tv" 
  16.             android:layout_width="wrap_content" 
  17.             android:layout_height="wrap_content" 
  18.             android:textColor="#ffffff" 
  19.             android:textSize="20sp" /> 
  20.         <RadioGroup android:id="@+id/rg" 
  21.             android:layout_width="wrap_content" 
  22.             android:layout_height="wrap_content" 
  23.             android:textColor="#ffffff"> 
  24.           
  25.         <RadioButton 
  26.             android:id="@+id/a" 
  27.             android:layout_width="wrap_content" 
  28.             android:layout_height="wrap_content" 
  29.             android:text="A" /> 
  30.  
  31.  
  32.         <RadioButton 
  33.             android:id="@+id/b" 
  34.             android:layout_width="wrap_content" 
  35.             android:layout_height="wrap_content" 
  36.             android:text="B" /> 
  37.  
  38.            
  39.             <RadioButton 
  40.                 android:id="@+id/c" 
  41.                 android:layout_width="wrap_content" 
  42.                 android:layout_height="wrap_content" 
  43.                 android:text="C" /> 
  44.  
  45.  
  46.             <RadioButton 
  47.                 android:id="@+id/d" 
  48.                 android:layout_width="wrap_content" 
  49.                 android:layout_height="wrap_content" 
  50.                 android:text="D" /> 
  51.                   
  52.             </RadioGroup> 
  53.                   
  54. </LinearLayout> 
  55. </LinearLayout> 

 

 

二、

在创建列表ListView时使用了两种适配器Adapter。一个是系统自带的SimpleAdapter扩展性最好,可以定义各种各样的布局出来,放上ImageView(图片)。另一个是自己定义的ListViewAdapter,它继承于BaseAdapter,通过编写里面必须实现的方法来实现多个RaddioButton的选择列表。

 

 

 
  1. package com.xc.media;  
  2.  
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import android.content.Context;  
  6. import android.view.LayoutInflater;  
  7. import android.view.View;  
  8. import android.view.ViewGroup;  
  9. import android.widget.BaseAdapter;  
  10. import android.widget.RadioButton;  
  11. import android.widget.RadioGroup;  
  12. import android.widget.TextView;  
  13.  
  14. public class ListViewAdapter extends BaseAdapter{  
  15.     private Context context;  
  16.     private HashMap<Integer, Integer> map  = new HashMap<Integer, Integer>();;  
  17. //  private ArrayList<Integer> state = new ArrayList<Integer>();  
  18.     ArrayList<String> choices;  
  19.     private int num;  
  20.     RadioButton a,b,c,d;  
  21.     RadioGroup rg;  
  22.     TextView tv;  
  23.     int p;  
  24.     public ListViewAdapter(Context context, ArrayList<String> choices) {  
  25.         this.context = context;  
  26.         this.choices = choices;  
  27.     }  
  28.       
  29.     public void setNumList(int n) {  
  30.         //设置要显示多少行  
  31.         num = n;      
  32.     }  
  33.       
  34.     public int getCount() {  
  35.         return num;  
  36.     }  
  37.  
  38.     public Object getItem(int position) {  
  39.         return position;  
  40.     }  
  41.  
  42.     public long getItemId(int position) {  
  43.         return position;  
  44.     }  
  45.       
  46.     public HashMap<Integer, Integer> getState() {  
  47.         return map;  
  48.     }  
  49.       
  50.     public int getPosition(){  
  51.         return p;  
  52.     }  
  53.       
  54.     public View getView(int position, View convertView, ViewGroup parent) {  
  55.         p = position;  
  56.         final int selectId = position;  
  57.             convertView = LayoutInflater.from(context).inflate(R.layout.radiobutton, null);  
  58.             tv = (TextView)convertView.findViewById(R.id.tv);  
  59.             a = (RadioButton)convertView.findViewById(R.id.A);  
  60.             b = (RadioButton)convertView.findViewById(R.id.B);  
  61.             c = (RadioButton)convertView.findViewById(R.id.C);  
  62.             d = (RadioButton)convertView.findViewById(R.id.D);  
  63.             rg = (RadioGroup)convertView.findViewById(R.id.rg);       
  64.               
  65.             tv.setText(choices.get(position*6));  
  66.             a.setText(choices.get(position*6+1));  
  67.             c.setText(choices.get(position*6+2));  
  68.             b.setText(choices.get(position*6+3));  
  69.             d.setText(choices.get(position*6+4));  
  70.           
  71.           
  72.         rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {  
  73.             
  74.             public void onCheckedChanged(RadioGroup group, int checkedId) {  
  75.             //  group.getCheckedRadioButtonId();  
  76.                 for(int z=0;z<group.getChildCount();z++) {  
  77.                     RadioButton choiseButton = (RadioButton) group.getChildAt(z);                 
  78.                        if(choiseButton.getId()== checkedId) {                                
  79.                            if(!map.containsKey(selectId)){  
  80.                                map.put(selectId, z);  
  81.                            }  
  82.                            else {  
  83.                                map.remove(selectId);  
  84.                                map.put(selectId, z);  
  85.                            }                      
  86.                        }  
  87.                 }  
  88.             }  
  89.         });  
  90.         return convertView;  
  91.     }  
  92.  
  93. }  

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中的控件。