首页 > 其他分享 >简单实现可以多选的ProductListDialog<T>

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

时间:2023-04-06 22:07:29浏览次数:59  
标签:多选 void ProductListDialog item context 简单 import android public


只是一个范例,是为了代码快速迭代而写的


使用了listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);


效果图



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



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

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

  • 大小: 62.5 KB
  • 查看图片附件

标签:多选,void,ProductListDialog,item,context,简单,import,android,public
From: https://blog.51cto.com/u_5454003/6174213

相关文章

  • VideoView简单视频播放
    只是上上手而已的例子。packagecom.chenchen.app;importjava.io.File;importjava.io.FilenameFilter;importjava.util.ArrayList;importjava.util.List;importjava.util.Random;importandroid.app.Activity;importandroid.content.Context......
  • 带动画效果的简单Tips显示
    项目地址:https://github.com/nhaarman/supertooltips我比较懒,懒得以后重新写了,所以直接copy了。用法:packagecom.haarman.supertooltips;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.view.Layout......
  • 半天时间写完一个案例,循序渐进的掌握uni-app,使用uni-app完成一个简单项目——新闻列表
    一、创建项目uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。uni-app在手,做啥都不愁。即使不跨端,uni-app也是更好的小程序开发框架(......
  • 简单分析
    流量监控,例如过滤出“8.8.8.8”的IP流量yuminstallepel-releaseiftopiftop-ienp2s0f0-N-P-F8.8.8.8/32ntcpdump,例如过滤出"8.8.8.8:3636"的数据包tcpdump-ienp2s0f0host8.8.8.8anddstport3636-nntcpdump多个IP进行抓包tcpdump-ienp2s0f0host1.1......
  • Vue3.0学习(一)------Vue简单介绍
    什么是Vue?官方原文:Vue是一款用于构建用户界面的JavaScript框架。它基于标准的HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。简单来说,Vue就是一个构建用户界面的前端框架Vue的两个核心功能声明式渲染Vue基于标准HTML扩展了一......
  • 可视化组件g2之分组箱型图、柱形图、散点图简单使用
    <!--引入G2文件--><scriptsrc="./plugins/g2.v5.min.js"></script><style> .container{  display:flex; } .div{  height:500px; }</style><!--创建图表容器--><divclass="container"> ......
  • 走进Java接口测试之TestNg自定报告简单学习
    背景Testng报告是否可以自定义,后面通过查找资料便有了如下自定义报告,testng中提供很多接口,如果需要改造成自己报告只要实现他们的接口即可,以下是根据自己想法实现如下自定义testng报告,如果大家感兴趣,可以根据自己需求修改。也可以把这些数据存储到数据库,之后通过一定规则即可展示......
  • php上传文件简单示例
    php上传文件简单示例 <?php$log='';$buf=ob_get_contents();ob_end_clean();$postmaxsize=trim(ini_get('post_max_size'));//preg_match_all('/\d+/',$postmaxsize,$arr);//$number=$arr[0][0];//if(strpos($postmaxsize,&#......
  • 直播平台软件开发,简单易修改的弹框组件
    直播平台软件开发,简单易修改的弹框组件弹窗组件适用框架vue,uniapp使用再uniapp框架中可简单修改标签与尺寸单位后使用px与rpx <!--vue--><template><divv-show="ishide"@touchmove.stop.prevent><!--遮罩--><divclass="mask":style="maskStyle">......
  • 简单Gradle 的安装与配置
    一、什么是Gradle基于ApacheAnt和ApacheMaven概念的项目自动化构建开源工具,基于Groovy这个特定DSL语言来进行声明项目设置,也增加了基于Kotlin语言的kotlin-basedDSL。简介:Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven,Ivy仓库,支持传递性依赖管理,而不需要......