MySQL建立多选一列表_如何实现自定义列表的多个item,的单选或多选

展开全部

自定义ListView item中包含一个e69da5e6ba903231313335323631343130323136353331333337376333textview 和checkbox,checkbox选中级别高于item,故在xml中进行屏蔽

单选方法:(该方法同样适用于radiobutton)

main.xml

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

>

android:id="@+id/img"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:src="@drawable/triangle16blue"/>

android:id="@+id/lvGroup"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="@drawable/downbutton_corner"/>

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="horizontal" >

android:id="@+id/item_tv"

android:textSize="18sp"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:gravity="center_vertical" />

android:id="@+id/item_cb"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:focusable="false"

android:clickable="false"

android:focusableInTouchMode="false"

android:gravity="center_vertical"/>

MainActivity.java

public class MainActivity extends Activity {

private static final String TAG = "MainActivity";

private ListView listView;

private ArrayList groups;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

listView = (ListView) this.findViewById(R.id.list);

groups = new ArrayList();

groups.add("11");

groups.add("22");

groups.add("33");

groups.add("44");

groups.add("55");

groups.add("66");

groups.add("77");

GroupAdapter adapter = new GroupAdapter(this,groups);

listView.setAdapter(adapter);

listView.setOnItemClickListener(listItemClickListener);

OnItemClickListener listItemClickListener=new OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view, int position,

long id) {

取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤

ViewHolder viewHolder=(ViewHolder)view.getTag();

viewHolder.cb.toggle();// 把CheckBox的选中状态改为当前状态的反,gridview确保是单一选中

}

};

}

}

}

GroupAdapter.java

public class GroupAdapter extends BaseAdapter {

private Activity activity;//上下文

private ArrayList list;

private LayoutInflater inflater=null;//导入布局

private int temp=-1;

public GroupAdapter(Activity context, ArrayList list) {

this.activity = context;

this.list = list;

inflater=LayoutInflater.from(context);

}

@Override

public int getCount() {

return list.size();

}

@Override

public Object getItem(int position) {

return list.get(position);

}

@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return position;

}

//listview每显示一行数据,该函数就执行一次

@Override

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

ViewHolder holder=null;

if (convertView==null) {//当第一次加载ListView控件时 convertView为空

convertView=inflater.inflate(R.layout.group_item_view, null);//所以当ListView控件没有滑动时都会执行这条语句

holder=new ViewHolder();

holder.tv=(TextView)convertView.findViewById(R.id.item_tv);

holder.cb=(CheckBox)convertView.findViewById(R.id.item_cb);

convertView.setTag(holder);//为view设置标签

}

else{//取出holder

holder=(ViewHolder) convertView.getTag();//the Object stored in this view as a tag

}

//设置list的textview显示

holder.tv.setTextColor(Color.WHITE);

holder.tv.setText(list.get(position));

// 根据isSelected来设置checkbox的选中状况

holder.cb.setId(position);//对checkbox的id进行重新设置为当前的position

holder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

//把上次被选中的checkbox设为false

@Override

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

if(isChecked){//实现checkbox的单选功能,同样适用于radiobutton

if(temp!=-1){

//找到上次点击的checkbox,并把它设置为false,对重新选择时可以将以前的关掉

CheckBox tempCheckBox=(CheckBox)activity.findViewById(temp);

if(tempCheckBox!=null)

tempCheckBox.setChecked(false);

}

temp=buttonView.getId();//保存当前选中的checkbox的id值

}

}

});

//System.out.println("temp:"+temp);

//System.out.println("position:"+position);

if(position==temp)//比对position和当前的temp是否一致

holder.cb.setChecked(true);

else

holder.cb.setChecked(false);

return convertView;

}

static class ViewHolder {

TextView tv;

CheckBox cb;

}

}

listview checkbox实现多选框

MainAcitvity.java

public class MainActivity extends Activity {

private static final String TAG = "MainActivity";

private ListView listView;

private ArrayList groups;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

listView = (ListView) this.findViewById(R.id.list);

groups = new ArrayList();

groups.add("11");

groups.add("22");

groups.add("33");

groups.add("44");

groups.add("55");

groups.add("66");

groups.add("77");

GroupAdapter adapter = new GroupAdapter(this,groups);

listView.setAdapter(adapter);

listView.setOnItemClickListener(listItemClickListener);

OnItemClickListener listItemClickListener=new OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view, int position,

long id) {

取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤

ViewHolder viewHolder=(ViewHolder)view.getTag();

viewHolder.cb.toggle();// 把CheckBox的选中状态改为当前状态的反,gridview确保是单一选中

GroupAdapter.getIsSelected().put(position, viewHolder.cb.isChecked());//将CheckBox的选中状况记录下来

}

};

}

}

GroupAdapter.java

public class GroupAdapter extends BaseAdapter {

private Context context;//上下文

private ArrayList list;

//控制CheckBox选中情况

private static HashMap isSelected;

private LayoutInflater inflater=null;//导入布局

public GroupAdapter(Context context, ArrayList list) {

this.context = context;

this.list = list;

inflater=LayoutInflater.from(context);

isSelected=new HashMap();

initData();

}

private void initData(){//初始化isSelected的数据

for(int i=0;i

getIsSelected().put(i,false);

}

}

@Override

public int getCount() {

return list.size();

}

@Override

public Object getItem(int position) {

return list.get(position);

}

@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return position;

}

//listview每显示一行数据,该函数就执行一次

@Override

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

ViewHolder holder=null;

if (convertView==null) {//当第一次加载ListView控件时 convertView为空

convertView=inflater.inflate(R.layout.group_item_view, null);//所以当ListView控件没有滑动时都会执行这条语句

holder=new ViewHolder();

holder.tv=(TextView)convertView.findViewById(R.id.item_tv);

holder.cb=(CheckBox)convertView.findViewById(R.id.item_cb);

convertView.setTag(holder);//为view设置标签

}

else{//取出holder

holder=(ViewHolder) convertView.getTag();//the Object stored in this view as a tag

}

//设置list的textview显示

holder.tv.setTextColor(Color.WHITE);

holder.tv.setText(list.get(position));

// 根据isSelected来设置checkbox的选中状况

holder.cb.setChecked(getIsSelected().get(position));

return convertView;

}

static class ViewHolder {

TextView tv;

CheckBox cb;

}

public static HashMapgetIsSelected(){

return isSelected;

}

public static void setIsSelected(HashMap isSelected){

GroupAdapter.isSelected=isSelected;

}

}其中,getview负责显示每一行listview item,每显示一行就执行一次getview,

若要单选,必须保存当前选中的checkbox的position值,与listview 的每一个item的position进行比较,相同时才设置checkbox ischeck=true;

只有checkbox的setOnCheckChangeListener可以做到这点,保存上一次点击的position值,对checkbox的id值重新设置.temp保存该id值.

getview负责显示数据,onitemselectedlistener负责发送消息,提取数据,处理数据

本回答被提问者和网友采纳

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring的bean不能注入的几种原因及分析

1、异常信息 2.有可能引起的原因: 1、在applicationContext.xml的配置文件里的包扫描不对。 2、在web.xml里没有加载spring容器。 3、分布式工程&#xff0c;使用dubbo或者hsf通信&#xff0c;在服务层&#xff0c;或者消费层&#xff0c;单词写错了。 4、还有一种可能&am…

python后端需要什么基础_【后端开发】python爬虫需要什么基础

入手爬虫确实不要求你精通Python编程&#xff0c;但基础知识还是不能忽视的&#xff0c;那么我们需要哪些Python基础呢&#xff1f;首先我们先来看看一个最简单的爬虫流程&#xff1a;第一步要确定爬取页面的链接&#xff0c;由于我们通常爬取的内容不止一页&#xff0c;所以要…

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyR

异常信息&#xff1a; org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2 at org.mybatis.spring.MyBatisExceptionTransl…

java xms512m_安装版的tomcat设置JAVA_OPTS=-Xms128M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=512M...

tomcat如果是通过windows服务启动&#xff0c;执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.解决办法:修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\JavaOptions原值为-Dcatalina.homeE:\Tomcat…

异常信息java.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:

在写springboot项目时出现了一个这样的错误&#xff01;&#xff01; ava.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43) …

Error querying database. Cause: java.lang.UnsupportedOperationException

mybatis抛出以下异常&#xff1a; Error querying database. Cause: java.lang.UnsupportedOperationException 对应语句如下&#xff1a; select distinct code from ssj_dictionary 错误原因是 resultType“java.util.List” &#xff0c;这里应该改成&#xff1a; result…

从java多态到策略模式_设计模式中的多态——策略模式详解

2. 策略模式详解2.1 策略模式定义策略模式定义了一系列算法,并将每一个算法封装起来&#xff0c;而且使它们还可以相互替换。策略模式让算法独立于使用它的客户端而独立的变化。可以使用多态进行类比来理解策略模式的定义。一系列算法可以理解成接口的不同实现类,因为不同实现类…

linux服务器安装zookeeper本地项目远程连接

linux服务器安装zookeeper本地项目远程连接 zookeeper linux 服务器安装&#xff0c;本地idea连接 先决条件&#xff1a;一台linux服务器&#xff0c;服务器里面已经安装好java环境&#xff08;安装Java看这里&#xff1a;https://blog.csdn.net/qq_43842093/article/details…

修改linux远程主机名命令hostname

hostname命令 用这个命令&#xff1a;之后重新登录

zookeeper下载安装过程

1.1 下载安装 1、环境准备 ZooKeeper服务器是用Java创建的&#xff0c;它运行在JVM之上。需要安装JDK 7或更高版本。 2、上传 将下载的ZooKeeper放到/opt/ZooKeeper目录下 #上传zookeeper altp put f:/setup/apache-zookeeper-3.5.6-bin.tar.gz #打开 opt目录 cd /opt #创…

java 计算反码_java基础知识-原码、反码、补码、运算符

一、原码、反码、补码原码一个数转化成二进制。用最高位来表示正负&#xff0c;最高位为0表示正数&#xff0c;最高位为1表示负数。例如&#xff1a;short i5&#xff1b;因为在java里short占2个字节转化成二进制就是 00000000 00000101所以 00000000 00000101就是5的原码short…

dubbo-admin安装和简单使用

一、dubbo-admin安装 1、环境准备 dubbo-admin 是一个前后端分离的项目。前端使用vue&#xff0c;后端使用springboot&#xff0c;安装 dubbo-admin 其实就是部署该项目。我们将dubbo-admin安装到开发环境上。要保证开发环境有jdk&#xff0c;maven&#xff0c;nodejs 安装n…

java 文件流 重写_java中关于文件流的总结

[File类]1、 作用&#xff1a; 用于对磁盘文件进行操作。 删除、创建等。2、 三种常用的构造函数&#xff1a;① File file1 new File("F:\\test");直接传入一个路径&#xff0c;拿到一个文件或者是文件夹。② File file2 new File("F:\\test","tes…

java程序的加载顺序_Java类的加载顺序

问题昨天有人问我一个类中有静态方法&#xff0c;有静态代码块&#xff0c;普通代码块&#xff0c;构造函数&#xff0c;普通方法&#xff0c;静态方法&#xff0c;那么它们的加载顺序是什么&#xff1f;如果有之类继承该类&#xff0c;也有如上的方法&#xff0c;那么加载顺序…

java.lang.Thread类详解,yield方法,join方法,interrupt方法,interrupted方法,destroy方法

一、前言 位于java.lang包下的Thread类是非常重要的线程类&#xff0c;它实现了Runnable接口&#xff0c;今天我们来学习一下Thread类&#xff0c;在学习Thread类之前&#xff0c;先介绍与线程相关知识&#xff1a;线程的几种状态、上下文切换&#xff0c;然后接着介绍Thread类…

git stash 缓存 简介

当我们在使用git的时候&#xff0c;又是会有这种情况&#xff1a;当新的需求了的时候。我们需要为此需求新建一个分支&#xff0c;再次分支上进行修改&#xff0c;当经过测试&#xff0c;提交代码时&#xff0c;在将其合并到主分支&#xff0c;或生产分支上。 但是有时候也有失…

java中的线程池有哪些,分别有什么作用?

java中的线程池有哪些&#xff0c;分别有什么作用&#xff1f; 1.进程-线程简单介绍 2.java的线程池是什么&#xff0c;有哪些类型&#xff0c;作用分别是什么 3.使用线程池的优点 1.进程-线程的简单介绍 进程 什么是进程呢&#xff1f; 进程是计算机中的程序关于某数据集合…

线程安全的集合类有哪些?

验证ArrayList线程不安全 ArrayList 应当是开发中用到的最多的集合类&#xff0c;是动态列表&#xff0c;List 接口的实现类。 多数情况下&#xff0c;我们实在单线程环境使用&#xff0c;或者是在方法内部&#xff0c;以局部变量的形式使用&#xff0c;一般不会出现线程安全问…

try catch finally 中包含return的几种情况,及返回结果

第一种情况&#xff1a;在try和catch中有return&#xff0c;finally中没有return&#xff0c;且finally中没有对try或catch中要 return数据进行操作的代码&#xff0c;这种情况也是最好理解的。 public class Test {public static int num1;public static void main(String[] …

Shiro介绍及主要流程

Shiro介绍及主要流程 什么是Shiro Apache Shiro是一个强大且灵活的开源安全框架&#xff0c;易于使用且好理解&#xff0c;撇开了搭建安全框架时的复杂性。 Shiro可以帮助我们做以下几件事&#xff1a; 认证使用者的身份 提供用户的访问控制&#xff0c;比如&#xff1a; 决定…