您的位置:首页 > 移动开发 > Android开发

Android ListView嵌套ListView、滚动刷新数据

2014-07-08 15:40 369 查看
在Android开发中,咱们常用到的API中ListView就是其中之一,其在有限的手机屏幕上友好的展示数据提供了很好的功能,包括列表展示数据,及滚动分页展示数据,在界面上如果不需要ListView互相嵌套,那么使用就很简单,如:

//context :界面容器对象

//new ArrayList<Map<String,Object>>() :需要展示的数据集合

//R.layout.layout_name 数据项展示列表xml界面

//new String[]{} :绑定数据字段名称

//new int[]{} :需要绑定的空间ID名称

SimpleAdapter simpleAdapter= new SimpleAdapter (context,new ArrayList<Map<String,Object>>(), R.layout.layout_name, new String[]{},new int[]{});

ListView listView=new ListView();

listView.setAdapter(simpleAdapter);

效果图展示链接:http://sj.qq.com/myapp/detail.htm?apkName=opt.ls.liveSteward

如果某页面数据展示较为复杂,需要嵌套ListView才可展示出来,总的思路就是 在adapter中的getView方法中再次使用 嵌套的adaper来绑定数据展示子ListView信息,如:

/**

* @Description TODO(父明细展示适配器)

* @author

* @Date 2014-7-1 11:03:43

*

*/

private class BalancePayAdapter extends SimpleAdapter{

//获取收支详细记录信息

List<Map<String,Object>> dataDetails;

LayoutInflater mInflater;

Context context;

ListViewInScrollView listViewDetail;

private TextView balance_pay_year_lable;

private TextView pay_amount_total_title;

private TextView pay_number_title;

private TextView income_amount_total_title;

private TextView income_number_title;

private TextView balance_pay_year;

private TextView balance_pay_month;

private TextView balance_pay_day;

private LinearLayout pay_id_lin_LinearLayout;

private LinearLayout income_id_lin_LinearLayout;

public BalancePayAdapter(Context context,

List<? extends Map<String, ?>> data, int resource,

String[] from, int[] to) {

super(context, data, resource, from, to);

this.context=context;

this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

this.dataDetails=(List<Map<String, Object>>) data;

}

/**

* @Description TODO(收支详细记录信息)

* @param dataDetail

*/

public void setDataDetails(List<Map<String,Object>> dataDetails){

this.dataDetails=dataDetails;

}

@Override

public View getView (int position, View convertView, ViewGroup parent) {

if(convertView==null){

convertView = mInflater.inflate(R.layout.listview_balance_pay_item, null);

}

//设置收支日期

balance_pay_year=(TextView) convertView.findViewById(R.id.balance_pay_year);

balance_pay_month=(TextView) convertView.findViewById(R.id.balance_pay_month);

balance_pay_day=(TextView) convertView.findViewById(R.id.balance_pay_day);

//设置某天支出总额

pay_amount_total_title=(TextView) convertView.findViewById(R.id.pay_amount_total_title);

//设置某天支出笔数

pay_number_title=(TextView) convertView.findViewById(R.id.pay_number_title);

//设置某天收入总额

income_amount_total_title=(TextView) convertView.findViewById(R.id.income_amount_total_title);

//设置某天收入笔数

income_number_title=(TextView) convertView.findViewById(R.id.income_number_title);

balance_pay_year_lable=(TextView) convertView.findViewById(R.id.balance_pay_year_lable);

listViewDetail=(ListViewInScrollView)convertView.findViewById(R.id.balance_pay_detail_view);

if(null!=dataDetails&&!dataDetails.get(position).isEmpty())

{ Map mainMapData= dataDetails.get(position);

String balancePayRemark=PMSUtil.isNull(mainMapData.get("balancePayRemark"));

//获取当年年份

String currentYear=DateTimeUtil.formatDate8(new Date());

String queryDate=PMSUtil.isNull(mainMapData.get("balance_pay_date"));

String[] yearMonthDay=new String[]{"XXXX","XX","XX"};

if(null!=queryDate&&!"".equals(queryDate)){

yearMonthDay=queryDate.split("-");

}

/**

*

* 开始设置实际内容

*/

if(currentYear.equals(yearMonthDay[0])){

balance_pay_year.setVisibility(View.GONE);

balance_pay_year_lable.setVisibility(View.GONE);

}

balance_pay_year.setText(PMSUtil.isNull(yearMonthDay[0]));

balance_pay_month.setText(PMSUtil.isNull(yearMonthDay[1]));

balance_pay_day.setText(PMSUtil.isNull(yearMonthDay[2]));

pay_amount_total_title.setText(PMSUtil.isNull(mainMapData.get("pay_amount_total")));

String pay_number=PMSUtil.isNull(mainMapData.get("pay_number"));

pay_number_title.setText(pay_number);

if(pay_number==null||"".equals(pay_number)||(Constant.REMARK_KEY_VALUE.equals(balancePayRemark)&&"1".equals(pay_number))){

pay_id_lin_LinearLayout=(LinearLayout) convertView.findViewById(R.id.pay_id_lin);

pay_id_lin_LinearLayout.setVisibility(View.GONE);

}

income_amount_total_title.setText(PMSUtil.isNull(mainMapData.get("income_amount_total")));

String income_number=PMSUtil.isNull(mainMapData.get("income_number"));

income_number_title.setText(income_number);

income_id_lin_LinearLayout=(LinearLayout) convertView.findViewById(R.id.income_id_lin);

if(income_number==null||"".equals(income_number)||"0".equals(income_number)){

income_id_lin_LinearLayout.setVisibility(View.GONE);

}else{

income_id_lin_LinearLayout.setVisibility(View.VISIBLE);

}

String[] from=new String[]{"id","create_date","amount","income_model","remark","thumbnail_path"};

int[] to=new int[]{R.id.incomeId,R.id.create_date_title,R.id.amount_title,R.id.income_model_title,R.id.remark_title,R.id.image_uri_path_title};

//获取收支详细记录信息

List<Map<String,Object>> dataDetail=(List<Map<String, Object>>) mainMapData.get("datas");

BalancePayDetailAdapter balancePayDetailAdapter = new BalancePayDetailAdapter(position,context, (dataDetail==null?new ArrayList<Map<String,Object>>():dataDetail),
R.layout.listview_balance_pay_detail_item, from, to);

listViewDetail.setOnItemClickListener(new BalancePayDetailOnItemClickListener());

listViewDetail.setAdapter(balancePayDetailAdapter);

}

return convertView;

}

/**

* @Description TODO(收支详细ListView选择事件)

* @author

*

*/

private class BalancePayDetailOnItemClickListener implements OnItemClickListener{

@Override

public void onItemClick(AdapterView<?> adapter, View view, int position,

long arg3) {

ListView lView=(ListView)adapter;//adapter其实就是ListView

ImageView imageView= (ImageView) view.findViewById(R.id.image_uri_path_title);

Bitmap bitmap=imageView.getDrawingCache();

if(R.id.deleteIncomeRecord==view.getId()){

//点击了删除按钮

Map<String,Object> map=(Map<String, Object>) lView.getItemAtPosition(position);

if(incomeRecordService==null){

incomeRecordService=new IncomeRecordServiceImpl(context);

}

try {

Map msg=incomeRecordService.deleteIncomeRecordInfo(map);

if( Constant.MSG_RESULT_TRUE.equals(msg.get(Constant.MSG_RESULT_CODE))){

if(!bitmap.isRecycled()){

bitmap.recycle();

}

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

/**

* @Description TODO(子明细适配器)

* @author

*

*/

private class BalancePayDetailAdapter extends SimpleAdapter{

//获取收支详细记录信息

List<Map<String,Object>> dataDetails;

LayoutInflater mInflater;

private TextView create_date_view;

private TextView amount_view;

private TextView income_model_view;

private TextView remark_view;

private ImageView image_uri_path_view;

private ImageButton deleteIncomeRecord;

private Bitmap bmp;

private int positionParent;

private Context context;

public BalancePayDetailAdapter(int position,Context context,

List<? extends Map<String, ?>> data, int resource,

String[] from, int[] to) {

super(context, data, resource, from, to);

this.context=context;

this.dataDetails=(List<Map<String, Object>>) data;

this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

this.positionParent=position;

}

@Override

public View getView (int position, View convertView, ViewGroup parent) {

if(convertView==null){

convertView = mInflater.inflate(R.layout.listview_balance_pay_detail_item, null);

}

if(null!=dataDetails&&!dataDetails.get(position).isEmpty())

{

Map mainMapData= dataDetails.get(position);

create_date_view=(TextView) convertView.findViewById(R.id.create_date_title);

amount_view=(TextView) convertView.findViewById(R.id.amount_title);

income_model_view=(TextView) convertView.findViewById(R.id.income_model_title);

remark_view=(TextView) convertView.findViewById(R.id.remark_title);

image_uri_path_view=(ImageView) convertView.findViewById(R.id.image_uri_path_title);

deleteIncomeRecord=(ImageButton) convertView.findViewById(R.id.deleteIncomeRecord);

deleteIncomeRecord.setOnClickListener(new DeleteBalancePayRecordOnClickListener(position));

create_date_view.setText(PMSUtil.isNull(mainMapData.get("create_date")));

amount_view.setText(PMSUtil.isNull(mainMapData.get("amount"))+getResources().getString(R.string.rmb));

//income_model_view.setText(Constant.getIncomeModelValue(PMSUtil.isNull(mainMapData.get("income_model"))));

income_model_view.setText(PMSUtil.isNull(mainMapData.get("project_name")));

String income_model=PMSUtil.isNull(mainMapData.get("income_model"));

if(Constant.incomeModel[0].equals(income_model)){

//支出

amount_view.setTextColor(getResources().getColor(R.color.lightred));

}else if(Constant.incomeModel[1].equals(income_model)){

//收入

amount_view.setTextColor(getResources().getColor(R.color.lightblue));

}

remark_view.setText(PMSUtil.isNull(mainMapData.get("remark")));

image_uri_path_view.setOnClickListener(new ImageViewOnClickListener(position));

String image_uri_path=PMSUtil.isNull(mainMapData.get("thumbnail_path"));

if(image_uri_path!=null&&!"".equals(image_uri_path)&&!"null".equals(PMSUtil.isNull(image_uri_path))){

try {

//BitmapFactory.Options options = new BitmapFactory.Options();

//options.inSampleSize = 1;

//bmp = BitmapFactory.decodeFile(image_uri_path, options);

// bmp=OptimizeImage.decodeSampledBitmapFromFile(image_uri_path, 100, 100);

// image_uri_path_view.setImageBitmap(bmp);

if(imageThreadNum<sysNum){

//子线程异步加载图片数据

new MyLoadImageThread(image_uri_path_view,image_uri_path).start();

imageThreadNum++;

} else{

//主线程加载图片

OptimizeImage optimizeImage=OptimizeImage.initializeInstance();

optimizeImage.loadBitmap(image_uri_path, image_uri_path_view);

}

} catch (Exception e) {

Toast.makeText(context, R.string.loadImageError, Toast.LENGTH_SHORT).show();

}

}else{

//image_uri_path_view.setVisibility(View.GONE);

image_uri_path_view.setMinimumHeight(30);

}

}

return convertView;

}

/**

* @Description TODO(删除收支记录单击监听事件)

* @author 彭甜

*

*/

public class DeleteBalancePayRecordOnClickListener implements OnClickListener{

private int position;

public DeleteBalancePayRecordOnClickListener(int position){

this.position=position;

}

@Override

public void onClick(View arg0) {

if(R.id.deleteIncomeRecord==arg0.getId()){

//删除收支记录

final Map mapData= dataDetails.get(position);

if(mapData!=null&&!"".equals(mapData.get("id"))){

AlertDialog.Builder builder = new Builder(context);

builder.setMessage("确认删除吗?");

builder.setTitle("提示");

builder.setPositiveButton("确定", new DialogInterface.OnClickListener(){

@Override

public void onClick(DialogInterface arg0, int arg1) {

//删除的收支金额

double amount=PMSUtil.toTwoPointDouble(PMSUtil.isNull(mapData.get("amount")));

try {

if(incomeRecordService==null){

incomeRecordService=new IncomeRecordServiceImpl(context);

}

Map msg=incomeRecordService.deleteIncomeRecordInfo(mapData);

if((Constant.MSG_RESULT_TRUE).equals(msg.get(Constant.MSG_RESULT_CODE))){

//刷新收支明细ListView

dataDetails.remove(position);

BalancePayDetailAdapter.this.notifyDataSetChanged();

//刷新收支明细ListView 父级

String income_model=PMSUtil.isNull(mapData.get("income_model"));

if((Constant.incomeModel[0]).equals(income_model)){

//支出数据调整

int pay_number=Integer.parseInt(PMSUtil.isNull(list.get(positionParent).get("pay_number")));

double pay_amount_total=PMSUtil.toTwoPointDouble(PMSUtil.isNull(list.get(positionParent).get("pay_amount_total")));

list.get(positionParent).put("pay_amount_total", PMSUtil.toNPointDouble(pay_amount_total-amount));

list.get(positionParent).put("pay_number", pay_number-1);

}else if((Constant.incomeModel[1]).equals(income_model)){

//收入数据调整

int income_number=Integer.parseInt(PMSUtil.isNull(list.get(positionParent).get("income_number")));

double income_amount_total=PMSUtil.toTwoPointDouble(PMSUtil.isNull(list.get(positionParent).get("income_amount_total")));

list.get(positionParent).put("income_amount_total", PMSUtil.toNPointDouble(income_amount_total-amount));

list.get(positionParent).put("income_number", income_number-1);

}

int income_number=Integer.parseInt(PMSUtil.isNull(list.get(positionParent).get("income_number")));

int pay_number=Integer.parseInt(PMSUtil.isNull(list.get(positionParent).get("pay_number")));

if((income_number<1&&pay_number<1)||(income_number<=0&&pay_number<=1)){

String balance_pay_date=PMSUtil.isNull(list.get(positionParent).get("balance_pay_date"));

incomeRecordService.deleteIncomeRecordByIncomeDate(balance_pay_date);

//但某天收支记录都没有时候 就删除这天的记录

list.remove(positionParent);

//总记录数也就减一

--num;

}

//刷新最上级ListView列表

simpleAdapter.notifyDataSetChanged();

}

Toast.makeText(context, PMSUtil.isNull(msg.get(Constant.MSG_RESULT_DES)), Toast.LENGTH_SHORT).show();

} catch (Exception e) {

e.getStackTrace();

Toast.makeText(context,"删除收支记录失败("+e.getMessage()+")", Toast.LENGTH_SHORT).show();

}

arg0.dismiss();

} });

builder.setNegativeButton("取消", new DialogInterface.OnClickListener(){

@Override

public void onClick(DialogInterface arg0, int arg1) {

arg0.dismiss();

}

});

builder.create().show();

}

}

}

}

/**

* @Description TODO(图片点击监听)

* @author 彭甜

*

*/

public class ImageViewOnClickListener implements OnClickListener{

private int position;

public ImageViewOnClickListener(int position){

this.position=position;

}

@Override

public void onClick(View view) {

if(R.id.image_uri_path_title==view.getId()){

//点击图片

Map<String,Object> map=(Map<String, Object>) dataDetails.get(position);

String image_uri_path = !PMSUtil.isEmpty(PMSUtil.isNull(map

.get("image_uri_path"))) ? PMSUtil.isNull(map

.get("image_uri_path")) : PMSUtil.isNull(map

.get("thumbnail_path"));

if(image_uri_path!=null&&!"".equals(image_uri_path)){

Intent intent=new Intent(context,ImageZoomActivity.class);

intent.putExtra("image_uri_path", image_uri_path);

startActivity(intent);

}

}

}

}

}

有需要的朋友可以留下邮箱我把完整的源码发过去。

效果图展示链接:http://sj.qq.com/myapp/detail.htm?apkName=opt.ls.liveSteward
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: