今天自己完成了一个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>
效果图(见附图)