zoukankan      html  css  js  c++  java
  • Android中ListView结合CheckBox判断选中项

    本文主要实现在自定义的ListView布局中加入CheckBox控件,通过判断用户是否选中CheckBox来对ListView的选中项进行相应的操作。通过一个Demo来展示该功能,选中ListView中的某一项,然后点击Button按钮来显示选中了哪些项。

    [1] 程序结构图如下:

    listitem.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="wrap_content"  
         android:orientation="horizontal"  
         android:descendantFocusability="blocksDescendants">  
          <CheckBox  
             android:id="@+id/list.select"  
             android:layout_width="wrap_content"  
             android:layout_height="wrap_content"/>  
          <TextView  
             android:id="@+id/list.name"  
             android:layout_width="fill_parent"  
             android:layout_height="wrap_content"  
             android:layout_weight="1"  
             android:text="Name"  
             android:layout_gravity="center"  
             android:textSize="20dp"  
             android:layout_marginLeft="10dp"/>  
          <TextView  
             android:id="@+id/list.address"  
             android:layout_width="fill_parent"  
             android:layout_height="wrap_content"  
             android:layout_weight="1"  
             android:text="Address"  
             android:layout_gravity="center"  
             android:textSize="20dp"/>  
      </LinearLayout>  
    </LinearLayout>  
    

     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">  
        <Button  
           android:id="@+id/show"  
           android:layout_width="fill_parent"  
           android:layout_height="wrap_content"  
           android:text="Show"/>  
        <ListView  
           android:id="@+id/lvperson"  
           android:layout_width="fill_parent"  
           android:layout_height="fill_parent"/>  
    </LinearLayout>  
    

     Person.java:

    package com.andyidea.bean;  
      
    public class Person {  
      
        private String name;  
        private String address;  
          
        public String getName() {  
            return name;  
        }  
        public void setName(String name) {  
            this.name = name;  
        }  
        public String getAddress() {  
            return address;  
        }  
        public void setAddress(String address) {  
            this.address = address;  
        }  
          
    }  
    

     MainActivity.java:

    package com.andyidea.listview;  
      
    import java.util.ArrayList;  
    import java.util.HashMap;  
    import java.util.List;  
      
    import com.andyidea.bean.Person;  
      
    import android.app.Activity;  
    import android.app.AlertDialog;  
    import android.content.Context;  
    import android.os.Bundle;  
    import android.util.Log;  
    import android.view.LayoutInflater;  
    import android.view.View;  
    import android.view.ViewGroup;  
    import android.widget.BaseAdapter;  
    import android.widget.Button;  
    import android.widget.CheckBox;  
    import android.widget.ListView;  
    import android.widget.TextView;  
      
    public class MainActivity extends Activity {  
          
        Button show;  
        ListView lv;  
        List<Person> persons = new ArrayList<Person>();  
        Context mContext;  
        MyListAdapter adapter;  
        List<Integer> listItemID = new ArrayList<Integer>();  
          
        /** Called when the activity is first created. */  
        @Override  
        public void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.main);  
            mContext = getApplicationContext();  
            show = (Button)findViewById(R.id.show);  
            lv = (ListView)findViewById(R.id.lvperson);  
              
            initPersonData();  
            adapter = new MyListAdapter(persons);  
            lv.setAdapter(adapter);  
              
            show.setOnClickListener(new View.OnClickListener() {  
      
                @Override  
                public void onClick(View v) {  
                      
                    listItemID.clear();  
                    for(int i=0;i<adapter.mChecked.size();i++){  
                        if(adapter.mChecked.get(i)){  
                            listItemID.add(i);  
                        }  
                    }  
                      
                    if(listItemID.size()==0){  
                        AlertDialog.Builder builder1 = new AlertDialog.Builder(MainActivity.this);  
                        builder1.setMessage("没有选中任何记录");  
                        builder1.show();  
                    }else{  
                        StringBuilder sb = new StringBuilder();  
                          
                        for(int i=0;i<listItemID.size();i++){  
                            sb.append("ItemID="+listItemID.get(i)+" . ");  
                        }  
                        AlertDialog.Builder builder2 = new AlertDialog.Builder(MainActivity.this);  
                        builder2.setMessage(sb.toString());  
                        builder2.show();  
                    }  
                }  
            });  
        }  
          
        /**  
         * 模拟数据  
         */  
        private void initPersonData(){  
            Person mPerson;  
            for(int i=1;i<=12;i++){  
                mPerson = new Person();  
                mPerson.setName("Andy"+i);  
                mPerson.setAddress("GuangZhou"+i);  
                persons.add(mPerson);  
            }  
        }  
          
        //自定义ListView适配器  
        class MyListAdapter extends BaseAdapter{  
            List<Boolean> mChecked;  
            List<Person> listPerson;  
            HashMap<Integer,View> map = new HashMap<Integer,View>();   
              
            public MyListAdapter(List<Person> list){  
                listPerson = new ArrayList<Person>();  
                listlistPerson = list;  
                  
                mChecked = new ArrayList<Boolean>();  
                for(int i=0;i<list.size();i++){  
                    mChecked.add(false);  
                }  
            }  
      
            @Override  
            public int getCount() {  
                return listPerson.size();  
            }  
      
            @Override  
            public Object getItem(int position) {  
                return listPerson.get(position);  
            }  
      
            @Override  
            public long getItemId(int position) {  
                return position;  
            }  
      
            @Override  
            public View getView(int position, View convertView, ViewGroup parent) {  
                View view;  
                ViewHolder holder = null;  
                  
                if (map.get(position) == null) {  
                    Log.e("MainActivity","position1 = "+position);  
                      
                    LayoutInflater mInflater = (LayoutInflater) mContext  
                            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
                    view = mInflater.inflate(R.layout.listitem, null);  
                    holder = new ViewHolder();  
                    holder.selected = (CheckBox)view.findViewById(R.id.list_select);  
                    holder.name = (TextView)view.findViewById(R.id.list_name);  
                    holder.address = (TextView)view.findViewById(R.id.list_address);  
                    final int p = position;  
                    map.put(position, view);  
                    holder.selected.setOnClickListener(new View.OnClickListener() {  
                          
                        @Override  
                        public void onClick(View v) {  
                            CheckBox cb = (CheckBox)v;  
                            mChecked.set(p, cb.isChecked());  
                        }  
                    });  
                    view.setTag(holder);  
                }else{  
                    Log.e("MainActivity","position2 = "+position);  
                    view = map.get(position);  
                    holder = (ViewHolder)view.getTag();  
                }  
                  
                holder.selected.setChecked(mChecked.get(position));  
                holder.name.setText(listPerson.get(position).getName());  
                holder.address.setText(listPerson.get(position).getAddress());  
                  
                return view;  
            }  
              
        }  
          
        static class ViewHolder{  
            CheckBox selected;  
            TextView name;  
            TextView address;  
        }  
    }  
    

     运行结果:

     

     

  • 相关阅读:
    SpringBoot配置文件(2)
    SpringBoot配置文件(1)
    java8新特性之stream流
    java8新特性之Lambda表达式
    zoj 1709 Oil Deposits
    zoj 2110 Tempter of the Bone
    poj 2823 Sliding Window
    fzu 1894 志愿者选拔
    hdoj 1754 I Hate It
    poj2404中国邮递员
  • 原文地址:https://www.cnblogs.com/leihupqrst/p/3183098.html
Copyright © 2011-2022 走看看