Android ListView表单实现多选删除,高度随表单项多少变化
2015-07-15 21:40
531 查看
今天自己完成了一个ListView表单,这个表单可以实现多选删除,
视图对应的Acticity类
private ListView an_passengerList;
private LinearLayout an_passengerList_layout;
an_passengerList_layout= (LinearLayout) findViewById(R.id.an_passengerList_layout);
an_passengerList= (ListView) findViewById(R.id.an_passengerList);
an_passengerList_layout.setVisibility(View.VISIBLE);
an_passengerList.setVisibility(View.VISIBLE);
fpassergerListAdapter= new FlyPassergerListAdapter(mContext, cacheSp, pChoosedList);
an_passengerList.setAdapter(fpassergerListAdapter);
fpassergerListAdapter.notifyDataSetChanged();
/**
* 乘车人删除后 更新视图(ListView的大小应该可以根据项目的多少,自适应高度)
*/
public void refreshPassengerList(){
int totalHeight = 0;
for (int i = 0; i < fpassergerListAdapter.getCount(); i++) {
View listItem = fpassergerListAdapter.getView(i, null, an_passengerList);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = an_passengerList.getLayoutParams();
params.height = totalHeight + (an_passengerList.getDividerHeight() * (fpassergerListAdapter.getCount() -1));
((ViewGroup.MarginLayoutParams)params).setMargins(10, 10, 10, 10);
an_passengerList.setLayoutParams(params);
}
List对应的adapter
package com.ldkj_bank.www.adapter;
import java.util.ArrayList;
import java.util.List;
import com.ldkj_bank.www.R;
import com.ldkj_bank.www.adapter.PayStatusAdapter.ViewHolder;
import com.ldkj_bank.www.model.MPayStatus;
import com.ldkj_bank.www.model.airTicket.Passenger;
import com.ldkj_bank.www.provider.CommonService;
import com.ldkj_bank.www.ui.AnOrderInfoEditActivity;
import com.ldkj_bank.www.ui.PayStatusActivity;
import com.ldkj_bank.www.util.Logger;
import android.R.integer;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class FlyPassergerListAdapter extends BaseAdapter{
private CommonService commonService;
private List<Passenger> passengersList;
private Context mContext;
protected SharedPreferences cacheSp;
private List<String> isChoosed;
public FlyPassergerListAdapter(Context context, SharedPreferences cacheSps,
List<Passenger> list) {
this.passengersList = list;
this.mContext = context;
this.cacheSp = cacheSps;
commonService = new CommonService(mContext);
isChoosed=new ArrayList<String>();
for(int i=0;i<passengersList.size();i++){
isChoosed.add("0");
}
Logger.d("-----------PayStatusAdapter1----------------" + list.size());
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return passengersList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = new ViewHolder();
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.an_adapter_passengers, null);
viewHolder.onePerson = (LinearLayout) convertView
.findViewById(R.id.yeinfo);
viewHolder.passengeYuan = (TextView) convertView
.findViewById(R.id.passengeYuan);
viewHolder.passengerName = (TextView) convertView
.findViewById(R.id.passengerName);
viewHolder.passengerDelete = (TextView) convertView
.findViewById(R.id.passengerDelete);
final TextView passengeYuanCopy=viewHolder.passengeYuan;
final TextView passengerName=viewHolder.passengerName;
final TextView passengerDeleteCopy=viewHolder.passengerDelete;
viewHolder.passengeYuan.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if( isChoosed.get(position).equals("0")){
passengeYuanCopy.setBackgroundResource(R.drawable.paystatus_icon_press);
passengerDeleteCopy.setBackgroundColor(Color.parseColor("#E9694E"));
//passengeYuanCopy.setTag((String)"1");
isChoosed.set(position, "1");
//passengerDeleteCopy1.setVisibility(View.VISIBLE);
}else{
//passengeYuanCopy.setTag((String)"0");
isChoosed.set(position, "0");
passengeYuanCopy.setBackgroundResource(R.drawable.paystatus_icon_normal);
passengerDeleteCopy.setBackgroundColor(Color.parseColor("#AE9A95"));
//passengerDeleteCopy1.setVisibility(View.INVISIBLE);
}
}
});
passengerDeleteCopy.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
AnOrderInfoEditActivity anoieActivity=(AnOrderInfoEditActivity)mContext;
List<Passenger> choosedList= anoieActivity.getpChoosedList();
isChoosed.remove(position);
choosedList.remove(position);
anoieActivity.setpChoosedList(choosedList);
anoieActivity.getFpassergerListAdapter().notifyDataSetChanged();
anoieActivity.refreshPassengerList();
}
});
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.onePerson = (LinearLayout) convertView
.findViewById(R.id.yeinfo);
viewHolder.passengeYuan = (TextView) convertView
.findViewById(R.id.passengeYuan);
viewHolder.passengerName = (TextView) convertView
.findViewById(R.id.passengerName);
viewHolder.passengerDelete = (TextView) convertView
.findViewById(R.id.passengerDelete);
final TextView passengeYuanCopy=viewHolder.passengeYuan;
final TextView passengerName=viewHolder.passengerName;
final TextView passengerDeleteCopy=viewHolder.passengerDelete;
viewHolder.passengerName.setText(passengersList.get(position).getName()+"");
if( isChoosed.get(position).equals("1")){
passengeYuanCopy.setBackgroundResource(R.drawable.paystatus_icon_press);
passengerDeleteCopy.setBackgroundColor(Color.parseColor("#E9694E"));
}else{
passengeYuanCopy.setBackgroundResource(R.drawable.paystatus_icon_normal);
passengerDeleteCopy.setBackgroundColor(Color.parseColor("#AE9A95"));
}
return convertView;
}
static class ViewHolder {
LinearLayout onePerson;
TextView passengeYuan;
TextView passengerName;
TextView passengerDelete;
TextView passengerDelete1;
}
}
对应的xml文件(listview)
<LinearLayout
android:id="@+id/an_passengerList_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFFFFF"
android:orientation="horizontal"
android:visibility="gone">
<ListView
android:id="@+id/an_passengerList"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone"
>
</ListView>
</LinearLayout>
对应的xml文件(listview中的每一项 an_adapter_passengers)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/onePerson"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#AE9A95"
android:orientation="horizontal" >
<TextView
android:id="@+id/passengeYuan"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/paystatus_icon_normal"
android:gravity="center"
android:height="40dp"
android:textColor="#000000" />
<TextView
android:id="@+id/passengerName"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginLeft="40dp"
android:layout_weight="4"
android:gravity="center"
android:text="an"
android:textColor="#000000" />
<TextView
android:id="@+id/passengerDelete"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:layout_margin="7dp"
android:layout_weight="1"
android:background="#AE9A95"
android:gravity="center"
android:height="40dp"
android:text="删除"
android:textColor="#AE9A95" />
</LinearLayout>
</LinearLayout>
效果图(见附图
)
视图对应的Acticity类
private ListView an_passengerList;
private LinearLayout an_passengerList_layout;
an_passengerList_layout= (LinearLayout) findViewById(R.id.an_passengerList_layout);
an_passengerList= (ListView) findViewById(R.id.an_passengerList);
an_passengerList_layout.setVisibility(View.VISIBLE);
an_passengerList.setVisibility(View.VISIBLE);
fpassergerListAdapter= new FlyPassergerListAdapter(mContext, cacheSp, pChoosedList);
an_passengerList.setAdapter(fpassergerListAdapter);
fpassergerListAdapter.notifyDataSetChanged();
/**
* 乘车人删除后 更新视图(ListView的大小应该可以根据项目的多少,自适应高度)
*/
public void refreshPassengerList(){
int totalHeight = 0;
for (int i = 0; i < fpassergerListAdapter.getCount(); i++) {
View listItem = fpassergerListAdapter.getView(i, null, an_passengerList);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = an_passengerList.getLayoutParams();
params.height = totalHeight + (an_passengerList.getDividerHeight() * (fpassergerListAdapter.getCount() -1));
((ViewGroup.MarginLayoutParams)params).setMargins(10, 10, 10, 10);
an_passengerList.setLayoutParams(params);
}
List对应的adapter
package com.ldkj_bank.www.adapter;
import java.util.ArrayList;
import java.util.List;
import com.ldkj_bank.www.R;
import com.ldkj_bank.www.adapter.PayStatusAdapter.ViewHolder;
import com.ldkj_bank.www.model.MPayStatus;
import com.ldkj_bank.www.model.airTicket.Passenger;
import com.ldkj_bank.www.provider.CommonService;
import com.ldkj_bank.www.ui.AnOrderInfoEditActivity;
import com.ldkj_bank.www.ui.PayStatusActivity;
import com.ldkj_bank.www.util.Logger;
import android.R.integer;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class FlyPassergerListAdapter extends BaseAdapter{
private CommonService commonService;
private List<Passenger> passengersList;
private Context mContext;
protected SharedPreferences cacheSp;
private List<String> isChoosed;
public FlyPassergerListAdapter(Context context, SharedPreferences cacheSps,
List<Passenger> list) {
this.passengersList = list;
this.mContext = context;
this.cacheSp = cacheSps;
commonService = new CommonService(mContext);
isChoosed=new ArrayList<String>();
for(int i=0;i<passengersList.size();i++){
isChoosed.add("0");
}
Logger.d("-----------PayStatusAdapter1----------------" + list.size());
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return passengersList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = new ViewHolder();
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.an_adapter_passengers, null);
viewHolder.onePerson = (LinearLayout) convertView
.findViewById(R.id.yeinfo);
viewHolder.passengeYuan = (TextView) convertView
.findViewById(R.id.passengeYuan);
viewHolder.passengerName = (TextView) convertView
.findViewById(R.id.passengerName);
viewHolder.passengerDelete = (TextView) convertView
.findViewById(R.id.passengerDelete);
final TextView passengeYuanCopy=viewHolder.passengeYuan;
final TextView passengerName=viewHolder.passengerName;
final TextView passengerDeleteCopy=viewHolder.passengerDelete;
viewHolder.passengeYuan.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if( isChoosed.get(position).equals("0")){
passengeYuanCopy.setBackgroundResource(R.drawable.paystatus_icon_press);
passengerDeleteCopy.setBackgroundColor(Color.parseColor("#E9694E"));
//passengeYuanCopy.setTag((String)"1");
isChoosed.set(position, "1");
//passengerDeleteCopy1.setVisibility(View.VISIBLE);
}else{
//passengeYuanCopy.setTag((String)"0");
isChoosed.set(position, "0");
passengeYuanCopy.setBackgroundResource(R.drawable.paystatus_icon_normal);
passengerDeleteCopy.setBackgroundColor(Color.parseColor("#AE9A95"));
//passengerDeleteCopy1.setVisibility(View.INVISIBLE);
}
}
});
passengerDeleteCopy.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
AnOrderInfoEditActivity anoieActivity=(AnOrderInfoEditActivity)mContext;
List<Passenger> choosedList= anoieActivity.getpChoosedList();
isChoosed.remove(position);
choosedList.remove(position);
anoieActivity.setpChoosedList(choosedList);
anoieActivity.getFpassergerListAdapter().notifyDataSetChanged();
anoieActivity.refreshPassengerList();
}
});
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.onePerson = (LinearLayout) convertView
.findViewById(R.id.yeinfo);
viewHolder.passengeYuan = (TextView) convertView
.findViewById(R.id.passengeYuan);
viewHolder.passengerName = (TextView) convertView
.findViewById(R.id.passengerName);
viewHolder.passengerDelete = (TextView) convertView
.findViewById(R.id.passengerDelete);
final TextView passengeYuanCopy=viewHolder.passengeYuan;
final TextView passengerName=viewHolder.passengerName;
final TextView passengerDeleteCopy=viewHolder.passengerDelete;
viewHolder.passengerName.setText(passengersList.get(position).getName()+"");
if( isChoosed.get(position).equals("1")){
passengeYuanCopy.setBackgroundResource(R.drawable.paystatus_icon_press);
passengerDeleteCopy.setBackgroundColor(Color.parseColor("#E9694E"));
}else{
passengeYuanCopy.setBackgroundResource(R.drawable.paystatus_icon_normal);
passengerDeleteCopy.setBackgroundColor(Color.parseColor("#AE9A95"));
}
return convertView;
}
static class ViewHolder {
LinearLayout onePerson;
TextView passengeYuan;
TextView passengerName;
TextView passengerDelete;
TextView passengerDelete1;
}
}
对应的xml文件(listview)
<LinearLayout
android:id="@+id/an_passengerList_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFFFFF"
android:orientation="horizontal"
android:visibility="gone">
<ListView
android:id="@+id/an_passengerList"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone"
>
</ListView>
</LinearLayout>
对应的xml文件(listview中的每一项 an_adapter_passengers)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/onePerson"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#AE9A95"
android:orientation="horizontal" >
<TextView
android:id="@+id/passengeYuan"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/paystatus_icon_normal"
android:gravity="center"
android:height="40dp"
android:textColor="#000000" />
<TextView
android:id="@+id/passengerName"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginLeft="40dp"
android:layout_weight="4"
android:gravity="center"
android:text="an"
android:textColor="#000000" />
<TextView
android:id="@+id/passengerDelete"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:layout_margin="7dp"
android:layout_weight="1"
android:background="#AE9A95"
android:gravity="center"
android:height="40dp"
android:text="删除"
android:textColor="#AE9A95" />
</LinearLayout>
</LinearLayout>
效果图(见附图
)
相关文章推荐
- Android_线程_多线程下载
- android Json数据解析(API数据进行解析),基于URLConnection
- 在android创建bitmap避免低记忆法
- android string.xml格式化
- Handler
- Android之——多线程断点续传下载示例
- Android 判断EditView是否为密码框
- Android代码修改出现error opening trace file: No such file or directory (2)解决办法之一
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决
- Android 开发 单选按钮的实现
- android官方教程学习01——ActionBar1
- 基于Android源码的模块编译
- Android高效加载大图、多图解决方案_LruCache,有效避免程序OOM
- Android四大组件之一:Activity
- android—socket-udp出现EADDRNOTAVAIL
- Android音乐播放器 -- 实现框架
- Android中如何使用ViewPager
- Android AIDL Service 跨进程传递复杂数据
- android按Menu出现菜单的动画
- Android WebDAV 客户端实现