ListView实现单选功能
来源:互联网 发布:厦门行知教育 编辑:程序博客网 时间:2024/05/22 20:54
1–控件要实现单选,首先要让控件实现Checkable接口,并继承某一个Layout。
控件的原始代码:
package com.example.chencklist;import android.content.Context;import android.view.View;import android.widget.Checkable;import android.widget.FrameLayout;import android.widget.RadioButton;import android.widget.TextView;public class SingleView extends FrameLayout implements Checkable{ TextView tv_item; RadioButton rb_item; public SingleView(Context context) { super(context); View.inflate(context, R.layout.item_check_view, this); tv_item = (TextView) findViewById(R.id.tv_item); rb_item = (RadioButton) findViewById(R.id.rb_item); } public void setText(String str) { tv_item.setText(str); } @Override public void setChecked(boolean checked) { rb_item.setChecked(checked); } @Override public boolean isChecked() { return rb_item.isChecked(); } @Override public void toggle() { rb_item.toggle(); }}
2–R.layout.item_check_view的xml布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <RadioButton android:id="@+id/rb_item" android:layout_width="wrap_content" android:layout_height="48dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" /> <TextView android:id="@+id/tv_item" android:layout_width="wrap_content" android:layout_height="48dp" android:layout_alignParentRight="true" android:gravity="center_vertical" android:text="name" /></RelativeLayout>
注意,以上的这三个属性必须为false:
android:clickable=”false”
android:focusable=”false”
android:focusableInTouchMode=”false”
否则,布局中的radiobutton可以被点击,并且获得焦点;当点击item的其他地方是正常的,但是若点击item中的radiobutton时,则会和item的点击事件发生冲突,使得item点击事件失效,视觉上会造成多个radiobutton被选中的状态。
3–自定义的adapter,继承自ArrayAdapter。
因为源生代码中,ListView的ListView.CHOICE_MODE_SINGLE属性(单选模式)是结合ArrayAdapter使用的。
package com.example.chencklist;import java.util.List;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;public class MyArrayAdapter extends ArrayAdapter<Bean>{ private Context context; public MyArrayAdapter(Context context, int resource, List<Bean> objects) { super(context, resource, objects); this.context = context; } @Override public View getView(int position, View convertView, ViewGroup parent) { SingleView view = null; if (convertView == null) { view = new SingleView(context); }else { view = (SingleView) convertView; } view.setText(getItem(position).getName()); return view; }}
4–自定义的测试实体类Bean
package com.example.chencklist;import java.io.Serializable;public class Bean implements Serializable{ private static final long serialVersionUID = -4788371797955109344L; String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
5–MainActivity中的代码:
package com.example.chencklist;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends Activity { Button btn; ListView lv; List<Bean> beans = new ArrayList<Bean>(); Bean checkedBean = new Bean();//被选中的Bean @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.btn_main); lv = (ListView) findViewById(R.id.lv_main); lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);//设置单选模式,也可以在xml中直接设置 } @Override protected void onResume() { setBeans(); ListAdapter adapter = new MyArrayAdapter(MainActivity.this, R.layout.item_check_view, beans); lv.setAdapter(adapter); lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //注意要对被选择的Bean做非空判断 checkedBean = beans.get(position);//获取到被选择的Bean } }); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //拿到被选择的Bean Toast.makeText(MainActivity.this, checkedBean.getName(), Toast.LENGTH_SHORT).show(); } }); super.onResume(); } //数据添加 private void setBeans() { Bean bean1 = new Bean(); bean1.setName("name1"); Bean bean2 = new Bean(); bean2.setName("name2"); Bean bean3 = new Bean(); bean3.setName("name3"); Bean bean4 = new Bean(); bean4.setName("name4"); beans.add(bean1); beans.add(bean2); beans.add(bean3); beans.add(bean4); }}
6–MainActivity的xml布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.chencklist.MainActivity" > <Button android:id="@+id/btn_main" android:layout_width="match_parent" android:layout_height="60dp" android:text="button" /> <ListView android:id="@+id/lv_main" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView></LinearLayout>
以上,实现ListView的单选功能。
0 0
- ListView实现单选功能
- ListView 加checkBox实现 单选功能
- Listview实现简单的单选功能
- Android实现listView的单选功能
- Android ListView 自定义用法(ListView 实现单选功能)
- Android小功能:在ListView中实现单选功能
- ListView单选及多选等功能实现
- android ListView中Checkbox实现单选,全选,全不选功能
- ListView一行显示两个Item并实现单选功能
- android ListView单选功能
- android listview 单选功能
- listview实现单选
- ListView实现RaidoButton单选
- ListView实现单选(一)
- 实现listview单选效果
- listview+checkbox实现单选
- Listview+RadioButton实现单选
- android listView实现单选
- jsp菜鸟成长之路--jsp动作元素
- STL源码之红黑树
- 毕业5年决定你的命运 ——值得所有不甘平庸的人看看
- 第十六节,异步操作和Async函数
- [生存志] 第72节 夫差许越称臣
- ListView实现单选功能
- 不建议用root用户启动was服务
- pandas中groupby和pivot_table(数据透视表)
- Ienumerable
- JAVA回调机制的理解
- Android自定义一个属于自己的刻度尺
- 本地保存crx文件的方法
- ARP、Tracert、Route 与 NBTStat命令详解
- 多文件上传样式改变