android textview时实显示checkbox选中的内容

在项目需求中可能遇到这种情况,要求textview时实显示checkbox选中的内容。

首先看效果图

android textview时实显示checkbox选中的内容_第1张图片

主要讲解两个知识点。

1.listview点击checkbox选中:

  首先checkbox设置: 
      android:focusable="false"
      android:clickable="false"

  然后在代码是用一个map作记录,初始化所有选中为    false,在点击 时候设置为true;

2.textview时实显示checkbox选中的内容;

  用一个ArrayList在每次点击item的时候重新设置集合,    然后遍历集合,增加到字符串中,最后显示到textview中。

代码如下:

item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="45dp" android:padding="5dp" android:orientation="horizontal">

    <CheckBox  android:focusable="false" android:clickable="false" android:id="@+id/checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="10dp" />

    <TextView  android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="30dp" android:text="item" android:textSize="20dp" />
</LinearLayout>

主要知识点还在是代码中注释讲解。

package app.checkboxdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends Activity {
    private ListView listview;
    private ArrayList list;
    private MyAdapter adapter;
    //用于记录checkbox选中的状态;
    public static HashMap map;
    private TextView textview;
    //把选中的checkbox添加到集合中;
    private ArrayList selectedItem;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listview = (ListView) findViewById(R.id.listview);
        textview = (TextView) findViewById(R.id.textview);
        selectedItem = new ArrayList();
        initData();
        initCheckBox();
        adapter = new MyAdapter();
        listview.setAdapter(adapter);
        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String s = "";
                ViewHolder holder = (ViewHolder) view.getTag();
                //toggle();设置开关。选中则再次点击为不选中。
                holder.cb.toggle();
                //在每次获取点击的item时将对于的checkbox状态改变,同时修改map的值。
                getIsSelected().put(position, holder.cb.isChecked());
                if (holder.cb.isChecked() == true) {
                    System.out.println("选中" + position);
                    //添加到集合中;
                    selectedItem.add(list.get(position));
                } else {
                    System.out.println("取消选中" + position);
                    //从集合中移除元素。
                    selectedItem.remove(list.get(position));
                }
                //最后遍历集合显示在textview;
                for (int i = 0; i < selectedItem.size(); i++) {
                    s = s + selectedItem.get(i);
                }
                textview.setText(s);
            }
        });
    }

    private void initCheckBox() {
        map = new HashMap();
        for (int i = 0; i < list.size(); i++) {
            map.put(i, false);
        }
    }

    private void initData() {
        list = new ArrayList();
        for (int i = 0; i < 30; i++) {
            list.add("这是item" + i);
        }
    }

    class MyAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder vh;
            if (convertView == null) {
                vh = new ViewHolder();
                convertView = getLayoutInflater().inflate(R.layout.item, null);
                vh.cb = (CheckBox) convertView.findViewById(R.id.checkbox);
                vh.tv = (TextView) convertView.findViewById(R.id.textview);
                convertView.setTag(vh);
            } else {
                vh = (ViewHolder) convertView.getTag();
            }
            vh.tv.setText(list.get(position) + "");
            //得到当前map中的选中的状态;默认为没有选中;
            vh.cb.setChecked(getIsSelected().get(position));
            return convertView;
        }
    }

    static final class ViewHolder {
        CheckBox cb;
        TextView tv;
    }

    public static HashMap<Integer, Boolean> getIsSelected() {
        return map;
    }
}

你可能感兴趣的:(checkbox)