现在的位置: 首页 > 综合 > 正文

ListView多选

2018年04月02日 ⁄ 综合 ⁄ 共 4509字 ⁄ 字号 评论关闭

最近做项目需要实现ListView的多选功能,虽然系统支持多选但是选中效果不太好,如果有多个界面有多选,但是风格又不一样,就不能更改Android系统的底层,否则效果就一样了。在网上搜了一下不外乎使用checbox等控件,设置ListView的多选属性,我觉得有点麻烦。所以重新写了一个支持多选的ListView的小例子,效果如下:

代码如下:

首先定义main.xml

<RelativeLayout 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"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true" >
    </ListView>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="center"
        android:background="#f2f2f2"
        >

        <Button
            android:id="@+id/chose_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/green_btn_background"
            android:gravity="center"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="15dp"
            android:text="确定" />
    </LinearLayout>
	
</RelativeLayout>

然后定义了每个item

<?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="match_parent"
    android:background="#f2f2f2"
    android:orientation="vertical" >

    <RelativeLayout
        android:id="@+id/list_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="10dp"
        android:paddingLeft="10dp"
        android:paddingTop="10dp" >

        <TextView
            android:id="@+id/chose_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:textColor="#000000"
            android:textSize="16sp" />

        <ImageView
            android:id="@+id/chose_img"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="15dp"
             />
    </RelativeLayout>
</LinearLayout>

最后在代码中实现:

package com.bn.listviewchose;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
/**
 * 如果需要向服务器传递所选项的参数,只需再定义一个List,将选中的项加入List即可
 */
public class MainActivity extends Activity {
	private ListView mListView;
	private List<String> mList;
	private  ListAdapter mAdapter;
	/**
	 * 测试数据
	 */
	String[] parent = { "一", "二", "三", "四", "五", "六", "七",
			"八", "九", "十", "十一", "十二", "十三", "十四",
			"十五"};

	List<Integer> mListCount;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		setContentView(R.layout.main);
		super.onCreate(savedInstanceState);

		mListView = (ListView) findViewById(R.id.listView1);
		mListCount = new ArrayList<Integer>();
		mList = new ArrayList<String>();
		for (int i = 0; i < parent.length; i++) {
			mList.add(parent[i] + "");
		}
		initData();
	}

	public void initData() {
		mAdapter = new ListAdapter(this, mList);
		mListView.setAdapter(mAdapter);
		for (int i = 0; i < mList.size(); i++) {
			mListCount.add(0);
		}

		mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> adapterView, View view,
					int position, long id) {
				if (mListCount.get(position) != 1) {
					mListCount.set(position, 1);
				} else {
					mListCount.set(position, 0);
				}

				MainActivity.this.mAdapter.notifyDataSetChanged();
			}
		});
	}

	public class ListAdapter extends BaseAdapter {
		private Context mContext;
		private List<String> mUsers;
		private LayoutInflater mInflater;

		public ListAdapter(Context mContext, List<String> mUsers) {
			this.mContext = mContext;
			this.mUsers = mUsers;
			mInflater = LayoutInflater.from(mContext);
		}

		@Override
		public int getCount() {

			return mUsers.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 viewHolder;
			if (convertView == null) {
				viewHolder = new ViewHolder();
				convertView = mInflater.inflate(
						R.layout.list_item, null);
				viewHolder.mName = (TextView) convertView
						.findViewById(R.id.chose_name);
				viewHolder.mChose = (ImageView) convertView
						.findViewById(R.id.chose_img);
				convertView.setTag(viewHolder);
			} else {
				viewHolder = (ViewHolder) convertView.getTag();
			}

			if (mListCount.get(position) == 1) {
				viewHolder.mChose
						.setBackgroundResource(R.drawable.hose_select);
			} else {
				viewHolder.mChose
						.setBackgroundResource(R.drawable.chose_normal);
			}
			viewHolder.mName.setText(mList.get(position));

			return convertView;
		}
	}

	class ViewHolder {
		TextView mName;
		ImageView mChose;
	}
}

抱歉!评论已关闭.