现在的位置: 首页 > 综合 > 正文

自定义listview

2018年02月16日 ⁄ 综合 ⁄ 共 4571字 ⁄ 字号 评论关闭
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.hx.zsnc.HomeActivity;
import com.hx.zsnc.R;
import com.hx.zsnc.ServiceActivity;
import com.hx.zsnc.utils.DensityUtil;
import com.hx.zsnc.utils.ServiceClick;

import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ScrollView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.SimpleAdapter.ViewBinder;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ListView;

public class MyServiceView extends ScrollView {

	String[] item;
	int[] itempic;
	int[] itemid;
	private ListView listview;
	private List<List<Map<String, Object>>> listDatas;
	private LinearLayout ll;
	private int ll_height;
	private Activity context;

	public MyServiceView(Activity context, AttributeSet attrs) {
		super(context, attrs);
	}

	public MyServiceView(Activity context, String[] item, int[] itempic,int[] itemid) {
		super(context);
		this.context=context;
		this.item = item;
		this.itempic = itempic;
		this.itemid=itemid;
		this.setScrollBarStyle(0);
		this.setFillViewport(true);
		this.setVerticalScrollBarEnabled(false);
		ll = new LinearLayout(context);
		ll.setOrientation(1);
		this.addView(ll);
		setListDatas();
		initdata(context);
	}

	private void initdata(Context context) {
		int size = listDatas.size();
		Log.i("size", listDatas.size() + "");
		ListView cornerListView;
		LayoutParams lp;
		listadapter adapter;
		// ���¼��
		int max = DensityUtil.dip2px(context, 20);
		int min = DensityUtil.dip2px(context, 10);
		int item = DensityUtil.dip2px(context, 80);
		for (int i = 0; i < size; i++) {
			cornerListView = new CornerListView(context);
			LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(
					LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
			if (i == 0 && i == (size - 1)) {
				lp1.setMargins(0, max, 0, max);
			} else if (i == 0) {
				lp1.setMargins(0, min, 0, min);
			} else if (i == (size - 1)) {
				lp1.setMargins(0, min, 0, 0);
			} else {
				lp1.setMargins(0, min, 0, min);
			}
			cornerListView.setLayoutParams(lp1);
			cornerListView.setCacheColorHint(0);
			cornerListView.setScrollbarFadingEnabled(false);
			cornerListView.setDivider(getResources().getDrawable(R.drawable.app_divider_h_gray));
			ll.addView(cornerListView);
			adapter = new listadapter(listDatas.get(i));
			cornerListView.setAdapter(adapter);
			setListViewHeightBasedOnChildren(cornerListView);
		}

	}

	public void setListDatas() {
		listDatas = new ArrayList<List<Map<String, Object>>>();
		listDatas.clear();
		List<Map<String, Object>> listData = new ArrayList<Map<String, Object>>();
		Map<String, Object> map;
		for (int i = 0; i < item.length; i++) {
			if ("".equals(item[i])) {
				listDatas.add(listData);
				listData = new ArrayList<Map<String, Object>>();
			} else {
				map = new HashMap<String, Object>();
				map.put("text", item[i]);
				map.put("pic", itempic[i]);
				map.put("id", itemid[i]);
				listData.add(map);
			}
		}

		listDatas.add(listData);
	}

	// ���������� �������
	class listadapter extends BaseAdapter {
		List<Map<String, Object>> map;

		public listadapter(List<Map<String, Object>> map) {
			this.map = map;
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return map.size();
		}

		@Override
		public Object getItem(int arg0) {
			// TODO Auto-generated method stub
			return map.get(arg0);
		}

		@Override
		public long getItemId(int arg0) {
			// TODO Auto-generated method stub
			return arg0;
		}

		@Override
		public View getView(int arg0, View arg1, ViewGroup arg2) {
			final HashMap<String, Object> mymap = (HashMap<String, Object>) map
					.get(arg0);
			View view = View.inflate(getContext(), R.layout.listitem, null);
			TextView tv = (TextView) view.findViewById(R.id.tv);
			tv.setText((CharSequence) mymap.get("text"));
			ImageView iv = (ImageView) view.findViewById(R.id.iv);
			iv.setImageResource((Integer) mymap.get("pic"));
			/*if (arg0 == map.size() - 1) {
				ImageView iv_dividerline = (ImageView) view
						.findViewById(R.id.iv_divider);
				iv_dividerline.setVisibility(View.GONE);
			}*/
			view.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					ServiceClick.serviceclick(context, mymap);
				}
			});
			return view;
		}
		
		

	}
	
	/**
	 * ����listview�ĸ߶ȣ�����scrollviewǶ��listview����ֹlistview������
	 * 
	 * @param listView
	 */
	public static void setListViewHeightBasedOnChildren(ListView listView) {
		ListAdapter listAdapter = listView.getAdapter();
		if (listAdapter == null) {
			// pre-condition
			return;
		}

		int totalHeight = 0;
		for (int i = 0; i < listAdapter.getCount(); i++) {
			View listItem = listAdapter.getView(i, null, listView);
			listItem.measure(0, 0);
			totalHeight += listItem.getMeasuredHeight();
		}

		ViewGroup.LayoutParams params = listView.getLayoutParams();
		params.height = totalHeight
				+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
		listView.setLayoutParams(params);
	}

}

抱歉!评论已关闭.