新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> Android 高级开发
    [返回] 中文XML论坛 - 专业的XML技术讨论区Android开发论坛『 Android 高级开发 』 → Android listview中添加CheckBox的完美实现[推荐] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 14135 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: Android listview中添加CheckBox的完美实现[推荐] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     挥戈回日 帅哥哟,离线,有人找我吗?魔羯座1987-12-26
      
      
      等级:大一(猛啃高等数学)
      文章:37
      积分:138
      门派:GOOGLEBBS.NET
      注册:2013/7/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给挥戈回日发送一个短消息 把挥戈回日加入好友 查看挥戈回日的个人资料 搜索挥戈回日在『 Android 高级开发 』 的所有贴子 访问挥戈回日的主页 引用回复这个贴子 回复这个贴子 查看挥戈回日的博客楼主
    发贴心情 Android listview中添加CheckBox的完美实现[推荐]

    本文实现的功能是将listview子项中的checkbox与listview分离出来,即点击listview的子项实现的是查看listview子项的内容,点击子项中的checkbox来实现checkbox的选中与否本文没有实现listview的分页滚屏效果以下是activity的代码:下面还有xml文件
    package com.test;
    import java.util.ArrayList;
    import java.util.HashMap;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.AlertDialog.Builder;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.View.OnClickListener;
    import android.widget.AdapterView;
    import android.widget.BaseAdapter;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.AdapterView.OnItemClickListener;
    public class ListView_CheckBoxActivity extends Activity {
    int scroll_num = 10;
    ViewHolder holder;
    HashMap<Integer,Boolean> isSelected;
    MyAdapter adapter;
    ArrayList<HashMap> data;
    HashMap map;
    ListView mListView;
    Button btn_all;
    Button btn_none;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mListView = (ListView)findViewById(R.id.main_listview);
    btn_all = (Button)findViewById(R.id.main_all);
    btn_none = (Button)findViewById(R.id.main_none);
    //初始化数据
    init_data();
    //设置按钮点击事件
    init_btn();
    //设置listview
    init_listview();
    }
    //初始化数据
    public void init_data(){
    data = new ArrayList<HashMap>();
    for(int i = 0; i<20; i++){
    map = new HashMap();
    map.put("title", "title-->"+i);
    map.put("content", "content-------------------------------->"+i);
    data.add(map);
    }
    }
    //设置按钮点击事件
    public void init_btn(){
    btn_all.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
    // TODO Auto-generated method stub
    for(int i = 0; i<data.size(); i++){
    isSelected.put(i, true);
    adapter.notifyDataSetChanged();
    }
    }
    });
    btn_none.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
    for(int i = 0; i<data.size(); i++){
    isSelected.put(i, false);
    adapter.notifyDataSetChanged();
    }
    }
    });
    }
    //设置listview
    public void init_listview(){
    adapter = new MyAdapter(ListView_CheckBoxActivity.this, data);
    mListView.setAdapter(adapter);
    //为listview的子项添加点击事件,点击后查看短信内容
    mListView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {
    holder = (ViewHolder) view.getTag();
    AlertDialog.Builder builder = new Builder(ListView_CheckBoxActivity.this);
    builder.setTitle(holder.title.getText().toString()+":")
    .setMessage(holder.content.getText().toString());
    AlertDialog dialog = builder.create();
    dialog.setCanceledOnTouchOutside(true);
    dialog.show();
    }
    });
    }
    class MyAdapter extends BaseAdapter{
    int count = scroll_num;
    Context mContext;
    ArrayList<HashMap> mData;
    LayoutInflater mInflater;
    public MyAdapter(Context context,ArrayList<HashMap> data) {
    this.mContext = context;
    this.mData = data;
    mInflater = (LayoutInflater) mContext.getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
    if(count>mData.size()){
    count = mData.size();
    }
    System.out.println("1111111111");
    isSelected = new HashMap<Integer,Boolean>();
    for(int i = 0; i<data.size(); i++){
    isSelected.put(i, false);
    }
    }
    @Override
    public int getCount() {
    return mData.size();
    }
    @Override
    public Object getItem(int position) {
    return position;
    }
    @Override
    public long getItemId(int position) {
    return position;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
    if(convertView == null){
    convertView = mInflater.inflate(R.layout.item_listview, null);
    holder = new ViewHolder();
    holder.title = (TextView) convertView.findViewById(R.id.item_listview_title);
    holder.content = (TextView) convertView.findViewById(R.id.item_listview_content);
    holder.checkBox = (CheckBox) convertView.findViewById(R.id.item_listview_checkbox);
    convertView.setTag(holder);
    }else{
    holder = (ViewHolder) convertView.getTag();
    }
    holder.title.setText(data.get(position).get("title").toString());
    holder.content.setText(data.get(position).get("content").toString());
    holder.checkBox.setChecked(isSelected.get(position));
    holder.checkBox.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    if(isSelected.get(position)){
    isSelected.put(position, false);
    }else{
    isSelected.put(position, true);
    }
    notifyDataSetChanged();
    }
    });
    return convertView;
    }
    }
    class ViewHolder{
    TextView title;
    TextView content;
    CheckBox checkBox;
    }
    }
    以下是main.xml文件的内容
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ListView
    android:id="@+id/main_listview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="0.1"
    ></ListView>
    <LinearLayout android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:layout_weight="0.9"
    android:orientation="horizontal">
    <Button android:id="@+id/main_all"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="0.5"
    android:text="全选选中"/>
    <Button android:id="@+id/main_none"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="0.5"
    android:text="全选取消"/>
    </LinearLayout>
    </LinearLayout>
    以下是listview子项item_listview.xml的内容
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <LinearLayout android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="0.7">
    <TextView android:id="@+id/item_listview_title"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>
    </LinearLayout>
    <RelativeLayout android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="0.3">
    <CheckBox android:id="@+id/item_listview_checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:focusable="false"
    />
    <TextView
    android:id="@+id/item_listview_content"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_alignParentLeft="true"
    android:layout_toLeftOf="@+id/item_listview_checkbox"
    android:layout_centerVertical="true"
    android:textSize="36dip"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    />
    </RelativeLayout>
    </LinearLayout>

    更多安卓技术问题欢迎加群探讨:278744577,验证码:w3,不写验证不予通过哟~


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    欢迎加入清源的android学习交流群,群号是: 278744577,加群时请验证:w3,谢谢!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2013/8/9 16:14:00
     
     GoogleAdSense魔羯座1987-12-26
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Android 高级开发 』 的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/12/26 18:32:51

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    46.875ms