`

简单实现可以多选的ProductListDialog<T>

阅读更多
只是一个范例,是为了代码快速迭代而写的
使用了listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
效果图




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

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import com.mb.bgfitting.CommonAdapter;
import com.mb.bgfitting.ViewHolder;
import com.mb.bgfitting.app.R;
import com.mb.bgfitting.model.BillSaleDetailInfo;

/**
 * 
 * @author pythoner
 * 
 */
public class ProductListDialog<T> extends Dialog {

	private Context context;
	private ListView listView;
	private List<T> beans;
	private List<T> checkedBeans = new ArrayList<T>();
	private CommonAdapter<T> adapter;

	public ProductListDialog(Context context, List<T> beans) {
		this(context, R.style.Theme_Dialog_NoTitle, beans);
		// TODO Auto-generated constructor stub

	}

	public ProductListDialog(Context context, int theme, List<T> beans) {
		super(context, theme);
		// TODO Auto-generated constructor stub
		this.context = context;
		this.beans = beans;
		init();
	}

	private void init() {
		this.setCanceledOnTouchOutside(true);
		this.setCancelable(true);
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.dialog_product_list);

		initViews();
		// initValues();
	}

	private void initViews() {
		if (beans == null) {
			return;
		}
		findViewById(R.id.btn_ok).setOnClickListener(
				new View.OnClickListener() {

					@Override
					public void onClick(View v) {
						// TODO Auto-generated method stub
						if (checkedBeans.size() == 0) {
							Toast.makeText(context, "请选择至少一件商品",
									Toast.LENGTH_LONG).show();
							return;
						}
						if (onOkClickListener != null) {
							onOkClickListener.onOkClick(v, checkedBeans);
						}
						dismiss();

					}
				});
		listView = (ListView) findViewById(R.id.listView);
		listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
		listView.setAdapter(adapter = new CommonAdapter<T>(context, beans,
				R.layout.item_product_list) {

			@Override
			public void setValues(ViewHolder helper, T item, final int position) {
				// TODO Auto-generated method stub
				if (item instanceof BillSaleDetailInfo) {
					BillSaleDetailInfo bean = (BillSaleDetailInfo) item;
					helper.setText(R.id.item_0, bean.getProdName());
					helper.setText(R.id.item_1, bean.getColorName());
					helper.setText(R.id.item_2, bean.getSizeName());
				}
			}

		});
		listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View v, int position,
					long id) {
				// TODO Auto-generated method stub
				T bean = beans.get(position);
				if (listView.isItemChecked(position)) {
					checkedBeans.add(bean);
				} else {
					if (checkedBeans.contains(bean)) {
						checkedBeans.remove(bean);
					}
				}
			}
		});
	}

	private void initValues() {
		// 不能写在init()中
		Window window = getWindow();
		WindowManager.LayoutParams lp = window.getAttributes();
		DisplayMetrics dm = context.getResources().getDisplayMetrics();
		lp.width = dm.widthPixels;
		lp.gravity = Gravity.BOTTOM;
		window.setAttributes(lp);
	}

	private OnOkClickListener<T> onOkClickListener;

	public interface OnOkClickListener<T> {
		public void onOkClick(View v, List<T> list);
	}

	public void setOnOkClickListener(OnOkClickListener<T> onOkClickListener) {
		this.onOkClickListener = onOkClickListener;
	}

}



布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="@dimen/dialog_width"
    android:layout_height="wrap_content"
    android:background="@android:color/white"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:cacheColorHint="@android:color/transparent" />
    
    <Button 
        android:id="@+id/btn_ok"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="确定"
        android:textSize="@dimen/font_big"
        />

</LinearLayout>


单个Item布局:item_product_list.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="wrap_content"
    android:orientation="horizontal" 
    android:background="@drawable/bg_item"
    >

        <TextView
            android:id="@+id/item_0"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="8dp"
            android:paddingBottom="8dp"
            android:textColor="@color/base_text_black"
            android:textSize="@dimen/font_middle" 
            android:layout_weight="1"
            />
        <TextView
            android:id="@+id/item_1"
            android:layout_width="40dp"
            android:layout_height="wrap_content"
            android:paddingTop="8dp"
            android:paddingBottom="8dp"
            android:textColor="@color/base_text_black"
            android:textSize="@dimen/font_middle"  />
        <TextView
            android:id="@+id/item_2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="8dp"
            android:paddingBottom="8dp"
            android:layout_weight="1"
            android:textColor="@color/base_text_black"
            android:textSize="@dimen/font_middle"  />
        
</LinearLayout>

选中的背景:bg_item.xml
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/base_blue" android:state_activated="true"></item>
    <item android:drawable="@android:color/transparent"/>
</selector>


用法:
ProductListDialog<BillSaleDetailInfo> d=new ProductListDialog<BillSaleDetailInfo>(context,billSaleDetailInfos);
						d.setOnOkClickListener(new ProductListDialog.OnOkClickListener<BillSaleDetailInfo>() {
							
							@Override
							public void onOkClick(View v,
									List<BillSaleDetailInfo> list) {
								// TODO Auto-generated method stub
								addToShoppingCartIfNecessary(list);
							}
						});
						d.show();



Android开发技巧——自定义单选或多选的ListView
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0619/3089.html

ListView多选操作模式详解CHOICE_MODE_MULTIPLE与CHOICE_MODE_MULTIPLE_MODAL
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1105/1906.html
  • 大小: 62.5 KB
分享到:
评论

相关推荐

    jsp select 带多选框

    在这个例子中,`&lt;select&gt;`标签的`name`属性定义了表单字段的名称,`multiple`属性使得用户可以多选,`size`属性定义了下拉框显示的选项数量。每个`&lt;option&gt;`标签代表一个可选的值,用户可以看到并选择。 在实际应用...

    使用bootstrap实现多选下拉框

    在Bootstrap中实现多选下拉框可以极大提升用户体验,使得用户在有限的空间内可以选择多个选项。以下是如何使用Bootstrap来创建这样一个功能的详细步骤。 首先,确保你已经在你的项目中引入了Bootstrap的相关资源。...

    vue表单绑定实现多选框和下拉列表的实例

    &lt;label&gt;测试多选渲染:&lt;/label&gt; &lt;div&gt; &lt;template v-for=item&gt; &lt;input type=checkbox name=hobby :value=item.id :checked=loopsss.indexOf(item.id) &gt; -1/&gt;{{item.name}} &lt;/template&gt; &lt;/div&gt; &lt;label&gt;下拉...

    struts<optionsCollection>应用文档+实例

    对于更复杂的情况,比如需要多选,可以使用`&lt;s:checkboxlist&gt;`: ```jsp &lt;s:checkboxlist name="selectedEmployees" list="allEmployees" label="选择员工" listKey="id" listValue="name" /&gt; ``` 这将创建一组...

    超牛的相册创建程序

    【可以多选图片】&lt;br&gt;&lt;br&gt;2:选择完图片后,点击下方的Next&lt;br&gt;&lt;br&gt;3:选择皮肤 Web Album Skin , 颜色样式Style,图片大小Photos Size, 输出文件路径Output Folder,其他设置略。&lt;br&gt;&lt;br&gt;4:设置完毕后点击 Generate ...

    C#源码大集合 01(共3卷)

    C#源码大集合 01(共3卷)&lt;br&gt;&lt;br&gt;之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷)&lt;br&gt;&lt;br&gt;&lt;br&gt;├─C#源码第一部分&lt;br&gt;│ ├─第1章 控件操作&lt;br&gt;│ │ ├─实例1 如何...

    C#源码大集合 03(共3卷)

    C#源码大集合 03(共3卷)&lt;br&gt;&lt;br&gt;之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷)&lt;br&gt;&lt;br&gt;&lt;br&gt;├─C#源码第一部分&lt;br&gt;│ ├─第1章 控件操作&lt;br&gt;│ │ ├─实例1 如何...

    jquery实现表格多选,单击颜色加深,再点击颜色还原,隔行换色,源代码

    &lt;title&gt;jQuery表格多选与颜色变换&lt;/title&gt; &lt;style&gt; table tr:nth-child(even) { background-color: #f2f2f2; } .selected { background-color: #d9d9d9; /* 选中状态颜色 */ } &lt;/style&gt; &lt;script src=...

    轻轻松松学用javascript编程(PDF)

    配图列表&lt;br&gt;列表 &lt;br&gt;1 说明&lt;br&gt;1.1 主要的内容&lt;br&gt;1.2 学习目标 &lt;br&gt;2 了解JavaScript 浏览器上的程序语言 &lt;br&gt;2.1 JavaScript 操作对象的简单介绍-- 属性和方法&lt;br&gt;2.2 JavaScript 代码的加入 &lt;br&gt;2.2.1 加入...

    Android自定义Dialog多选对话框(Dialog+Listview+CheckBox)

    总结起来,这个示例展示了如何在Android应用中创建一个具有多选功能的自定义Dialog,通过Dialog、ListView和CheckBox的组合实现用户交互。这种功能在很多场景下都很实用,比如选择联系人、文件或者其他任何需要用户...

    jQueryMultipleSelect实现下拉框多选

    而"jQuery Multiple Select"则是jQuery的一个插件,专门用于实现下拉框的多选功能,使得用户可以在下拉菜单中选择多个选项,极大地提高了交互体验。这个插件在各种需要用户进行多项选择的场景中十分实用,例如设置...

    瑞升在线问卷调查系统

    单行填充题&lt;br&gt;多行填充题&lt;br&gt;单选+输入&lt;br&gt;多选+输入(可控选择数)&lt;br&gt;矩阵题&lt;br&gt;对选项进行分值设定 &lt;br&gt;集成输入验证 防IP重复提交&lt;br&gt;可设定问卷结束日期&lt;br&gt;可设定提交后的显示页&lt;br&gt;问卷密码前置&lt;br&gt;即时开关...

    html多选下拉框 ,CheckBox的Select组件 可多选的下拉框

    在HTML中,创建一个可多选的下拉框通常涉及到`&lt;select&gt;`元素与`&lt;option&gt;`元素的组合,但为了实现多选功能,我们需要使用`&lt;input type="checkbox"&gt;`和自定义的JavaScript或者利用现代浏览器支持的Web组件技术。...

    html分组多选单选下拉框.rar

    通过结合CSS和JavaScript,可以实现更加复杂和交互式的下拉框功能,以满足各种用户界面需求。在提供的压缩包文件中,`select.html`很可能是包含这些示例代码的HTML文件,而`css`和`js`文件则可能包含了对应的样式和...

    jquery实现的多选下拉框

    安装完成后,我们可以通过简单的jQuery代码实现多选下拉框的功能。例如: ```html &lt;select id="mySelect" multiple&gt; &lt;option value="value1"&gt;Option 1&lt;/option&gt; &lt;option value="value2"&gt;Option 2&lt;/option&gt; ...

    bootstrap-select下拉选择搜索框,可以多选和单选

    Bootstrap Select是一款基于Bootstrap框架的插件,用于增强和美化HTML的`&lt;select&gt;`元素,提供了一个功能丰富的下拉选择器,其中包括搜索功能、多选和单选等特性。这款插件使得在网页交互中,用户可以更方便地进行...

    select 实现多选

    当我们希望实现多选功能时,就需要利用`&lt;select&gt;`的一些特定属性和方法。本篇文章将深入探讨如何在HTML、CSS以及JavaScript中实现`&lt;select&gt;`的多选特性。 ### HTML基础 在HTML中,`&lt;select&gt;`元素有一个名为`...

    Android 使用DialogFragment 实现一个可以多选的Dialog

    List&lt;String&gt; items = ...; // 这里填入你的选项 boolean[] checkedItems = ...; // 初始化选中状态 builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { @...

    无序列表(Ul)实现下拉多选[Jquery方式]

    可以通过在`&lt;li&gt;`内嵌套`&lt;input type="checkbox"&gt;`来实现。同时,为了使视觉效果更加友好,可以使用CSS来定制checkbox的样式,使其看起来更像传统的下拉框。 在Jquery中,可以使用`.change()`事件监听checkbox的...

    Jquery实现下拉框多选

    2. 分组选择:通过在`&lt;optgroup&gt;`标签中组织`&lt;option&gt;`,可以创建有层次的多选下拉框,帮助用户更好地理解和选择。 3. 全选/全取消:提供一键选择所有选项或清除所有已选选项的功能,简化用户的操作。 三、使用步骤...

Global site tag (gtag.js) - Google Analytics