实现思路是用一个list记录每个listview当中每一个item的选中状态,当list中选中与当前选中不一致,将list当中当前位置对应的设为已选,其他位置未选,大概思路是这样的。实现样式:


详细实现可见代码:

package com.example.singlechoose;import java.util.ArrayList;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends Activity {private ListView listview;private MyAdapter myAdapter;private ArrayList list = new ArrayList() { // listView的内容{add("item1");add("item2");add("item3");add("item4");add("item5");add("item6");add("item7");add("item8");add("item9");add("item10");}};private ArrayList checkList = new ArrayList(); // 判断listview单选位置@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}//设置选中的位置,将其他位置设置为未选public void checkPosition(int position) {for (int i = 0; i < checkList.size(); i++) {if (position == i) {// 设置已选位置checkList.set(i, true);} else {checkList.set(i, false);}}myAdapter.notifyDataSetChanged();}public void init() {listview = (ListView) findViewById(R.id.lsitview);for (int i = 0; i < list.size(); i++) {checkList.add(false); // 均为未选}myAdapter = new MyAdapter(MainActivity.this, list);listview.setAdapter(myAdapter);}//自定义adapterprivate class MyAdapter extends BaseAdapter {private LayoutInflater inflater;ArrayList myList;public MyAdapter(Context context, ArrayList myList) {this.inflater = LayoutInflater.from(context);this.myList = myList;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn myList.size();}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn 0;}@Overridepublic View getView(final int position, View convertView,ViewGroup parent) {Log.i("aaa", "getview");ViewHolder holder = null;if (convertView == null) {convertView = inflater.inflate(R.layout.layout_item, null);holder = new ViewHolder();holder.txt = (TextView) convertView.findViewById(R.id.txt);holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.txt.setText(myList.get(position));holder.checkBox.setChecked(checkList.get(position));holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {//单击checkbox实现单选,根据状态变换进行单选设置@Overridepublic void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {// TODO Auto-generated method stubif (isChecked) {checkPosition(position);} else {checkList.set(position, false);//将已选择的位置设为选择}}});convertView.setOnClickListener(new OnClickListener() {//item单击进行单选设置@Overridepublic void onClick(View v) {// TODO Auto-generated method stubcheckPosition(position);}});return convertView;}public final class ViewHolder {public TextView txt;public CheckBox checkBox;}}}


demo下载地址

百度云下载链接: https://pan.baidu.com/s/1kULQTKz 密码: r8rb。

代码健壮性可能存在问题,可自行优化。

更多相关文章

  1. Android在诸如editText等组件设置输入法半屏幕显示的说明
  2. Android(安卓)使用自定义Dialog打造ActionSheet菜单
  3. Android(安卓)ListView多选模式
  4. Android(安卓)文件系统的权限设置
  5. [置顶] android scrollview 滑动到顶端或者指定位置
  6. AndroidStudio2.2.3设置
  7. Android(安卓)动态加载menu
  8. Android(安卓)UI - TableLayout
  9. Android(安卓)设置开放隐性启动Intent

随机推荐

  1. Android自定义view三验证码输入控件
  2. android 输入法界面显示的开关
  3. cocos2d-x-2.1.4在NDK r9下的编译问题
  4. 【Android开发小记--9】触摸事件---实现
  5. Android(安卓)导入项目出错
  6. Android(安卓)inject input events 注入T
  7. android 自定义PopupMenu详解
  8. Android(安卓)setLayerType 硬件加速问题
  9. Android和IOS开发资料
  10. Android(安卓)内核源代码交叉编译纺