`

简单实现可以多选的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
分享到:
评论

相关推荐

    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;下拉...

    超牛的相册创建程序

    【可以多选图片】&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 如何...

    轻轻松松学用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 加入...

    使用HTML开发商业网站-表单控件-select课件.pptx

    爱好(多选):&lt;br /&gt; &lt;select multiple="multiple" size="4"&gt; &lt;!--设置多选和可见选项数--&gt; &lt;option&gt;读书&lt;/option&gt; &lt;option selected="selected"&gt;写代码&lt;/option&gt; &lt;!--设置默认选中项--&gt; &lt;option&gt;旅行&lt;/option&gt; ...

    B/S权限管理系统的一些算法

    catch-finally&lt;br&gt;递归查询&lt;br&gt;传递页面对象的值(如text.value)&lt;br&gt;对字符串的字符集转换&lt;br&gt;列表框(多选)在页面间的传递&lt;br&gt;树的深度算法

    双选框 两个<select>标签组成 高效代码清晰

    由两个&lt;select&gt;标签组成的具有挑选功能的js组建。 可实现左侧的元素移到右侧,右侧移到左侧。 有提交功能。 代码简洁、高效复用性强。 本段代码有Map的遍历读者不必细究。

    jQueryMultipleSelect实现下拉框多选

    jQuery Multiple Select实现下拉框多选,请注意是Multiple 。实例介绍详细,想用的可以直接Copy进去用

    Phpwind 1.36论坛(8/31日更新)

    &lt;br&gt; &lt;br&gt; 简介:&lt;br&gt; &lt;br&gt; PHPwind 支持同一数据库多个论坛运行!&lt;br&gt; &lt;br&gt; 在整体程序上采用先权限验证.再数据库查询.并在各页面保持很低数据库查询次数.&lt;br&gt; &lt;br&gt; 数据库设计上索引与数据库的充分利用避免了不少...

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

    Android 使用DialogFragment 实现一个可以多选的Dialog,实现横竖屏切换动态设置界面大小,轻松实现你想要的效果。

    select多选下拉列表+模糊查询功能.rar

    &lt;script type="text/javascript" src="jquery.combo.select.js" &gt;&lt;/script&gt; &lt;link rel="stylesheet" href="combo.select.css" /&gt; &lt;/head&gt; &lt;body&gt; &lt;select name="table_id" id="table_id"&gt; &lt;option value=""&gt;-...

    使用 SVG 制作单选和多选动画.rar

    &lt;li&gt;&lt;input id="r1" name="r1" type="radio"&gt;&lt;label for="r1"&gt;Seamlessly visualize quality intellectual capital&lt;/label&gt;&lt;/li&gt; &lt;li&gt;&lt;input id="r2" name="r1" type="radio"&gt;&lt;label for="r2"&gt;...

    c#网页采集自动入库程序

    功能:&lt;br&gt;1 自动抓取网页链接&lt;br&gt;2 对网页链接进行查重、排序、筛选,鼠标+shift多选,鼠标+alt多个删除&lt;br&gt;3 读入链接文件对其自动另存&lt;br&gt;4 对文件按照内容源代码进行截取后自动入库&lt;br&gt;5 自动判断下一页链接来...

    GridView实用源码(可以导出Excel)

    GridView实用源码(可以导出Excel)&lt;br&gt;&lt;br&gt;VS2005中GridView的自定义分页,单选、多选、排序、自增列及可以导出Excel的简单应用源码&lt;br&gt;多选时,只有全部选中时“多选”才选中&lt;br&gt;数据库文件在DB文件夹中,附加即可

    jsp select 带多选框

    NULL 博文链接:https://ollevere.iteye.com/blog/1718528

    ListView的多选模式

    这个功能很容易实现,但是在实现过程中,我希望自己的产品使用起来更加的人性化,所有我添加了**多文件压缩打包功能,多选,反选,全选等功能**,这样使用者就可以更加合理选择自己需要的log了。 那么问题来了,**...

    jquery实现的多选下拉框

    jquery实现的多选下拉框ehynds-jquery-ui-multiselect-widget-1.10-3.zip

    万韬在线考试系统

    万韬考试系统是一套可以用于学校、企事业单位和培训机构等在Internet和局域网上实现无纸化考试、帐户管理、题库管理、试卷管理、考试管理,等于一体的集成软件。本软件 提倡 操作简单方便、功能简洁实用、性能安全...

    Flash饼图投票系统单用户版 v2.0

    因采用了flash技术,所以界面...&lt;br&gt; 2、内容中显示每个项目占整个项目的百分比。&lt;br&gt; 3、利用饼图清晰形象的表现整个投票系统的情况。&lt;br&gt; 4、防止用户的多次投票。&lt;br&gt; 5、可设置投票项目是否支持多选(2.0版本更新)。

Global site tag (gtag.js) - Google Analytics