自己定义ListView就要自己写个LIstviewAdapter继承BaseAdapter这个类然后通过其中的getView()方法把数据映射到相应控件之中
下面是我实现的带单选框的listView(如果是想带按钮实现更简单,就不需要考虑单选框的按钮特性了)
在做的过程之中出现了点击item无响应的情况,最后发现是子控件radioButton获得了焦点是其父控件即item失去了焦点所以在getView ()之中让RadioButton失去焦点即可
先放个效果图
代码如下
package com.example.mylistview;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.TextView;
public class MyListViewWithRadio extends Activity implements OnItemClickListener {
private ListView listView;
private List<Map<String, Object>> mData;
//record the current checked radio number
private int checkedIndex = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mData = getData();
listView = new ListView(this);
MyAdapter myAdapter = new MyAdapter(this);
listView.setAdapter(myAdapter);
listView.setOnItemClickListener(this);
setContentView(listView);
}
//获取要在list中显示的数据
private List<Map<String,Object>> getData(){
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
Map<String,Object>