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); } }