声明,代码中一部分是摘自网络上,并不完全是自己写的
经过几天的请教,查找等,艰辛的过程,加上自己的修改,终于实现了自己满意的listview可以水平,垂直滚动,可以响应checkbox,textview的点击事件,可以任意布局,加入任意控件。 跟大家分享是希望像我一样的新手少走弯路。代码是完整的,不用任何修改即可实现图效果图中所示的效果 ,demo中用到的图片已上传如有不足之处,请指正,共同交流,共同进步代码:vlist.xml< ?xml version="1.0" encoding="utf-8"?>< TableLayout android:id="@+id/tableLayout1"android:layout_width="fill_parent" android:layout_height="fill_parent"xmlns:android="http://schemas.android.com/apk/res/android"><TableRow android:layout_width="fill_parent"android:layout_height="wrap_content" android:id="@+id/listview"><TextView android:layout_width="80dip" android:gravity="center"android:layout_height="wrap_content" android:textColor="#42AF40"android:drawableRight="@drawable/line_y" android:id="@+id/imageid_textview"></TextView><TextView android:layout_width="100dip"android:layout_height="wrap_content" android:textColor="#42AF40"android:drawableRight="@drawable/line_y" android:gravity="center"android:id="@+id/taskid_textview"></TextView><TextView android:layout_width="100dip" android:gravity="center"android:layout_height="wrap_content" android:textColor="#42AF40"android:drawableRight="@drawable/line_y" android:id="@+id/machineid_textview"></TextView><TextView android:layout_width="140dip" android:gravity="center"android:layout_height="wrap_content" android:textColor="#42AF40"android:drawableRight="@drawable/line_y" android:id="@+id/position"></TextView><TextView android:layout_width="120dip" android:gravity="center"android:layout_height="wrap_content" android:textColor="#42AF40"android:drawableRight="@drawable/line_y" android:id="@+id/taskstatus"></TextView><TextView android:layout_width="80dip" android:gravity="center"android:layout_height="wrap_content" android:textColor="#42AF40"android:drawableRight="@drawable/line_y" android:id="@+id/a07_ls_button"></TextView><CheckBox android:textColor="#42AF40" android:layout_width="80dip"android:gravity="center" android:layout_height="wrap_content"android:drawableRight="@drawable/line_y" android:id="@+id/a07_ls_checkbox"></CheckBox></TableRow></TableLayout>//taskoklayout.xml< LinearLayout android:id="@+id/relativeLayout1"android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"><HorizontalScrollViewandroid:id="@+id/HorizontalScrollView01"android:layout_height="400px"android:layout_width="fill_parent"android:layout_weight = "1"><LinearLayout android:layout_width="fill_parent"android:layout_height="fill_parent" android:layout_weight="1"><!-- 数据表格 --><ListView android:layout_width="fill_parent"android:layout_height="wrap_content" android:id="@+id/taskok_listView"android:scrollbars="vertical"></ListView></LinearLayout></HorizontalScrollView><LinearLayout android:layout_width="fill_parent"android:layout_height="fill_parent" android:layout_weight="4"android:orientation="horizontal" xmlns:android="http://schemas.android.com/apk/res/android"><Button android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="@string/taskok_button"android:id="@+id/taskok_button"></Button><Button android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="@string/sendback_button"android:id="@+id/sendback_button"></Button><Button android:id="@+id/invalidate_button"android:layout_width="wrap_content" android:layout_height="wrap_content"android:text="@string/invalidate_button"></Button></LinearLayout><LinearLayout android:layout_height="fill_parent"android:layout_width="fill_parent" android:layout_weight="4"android:orientation="horizontal" xmlns:android="http://schemas.android.com/apk/res/android"><Button android:id="@+id/back_button" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="@string/back_button"></Button><Button android:id="@+id/daohang_button" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="@string/daohang_button"></Button></LinearLayout>< /LinearLayout>activitypackage Android.GPSTest;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import Android.GlobalFunc.GlobalFunc;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.graphics.Color;import android.os.Bundle;import android.view.Gravity;import android.view.LayoutInflater;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.HorizontalScrollView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;public class TaskCheckOk_Activity extends Activity { private ListView list = null;private Button taskok_button = null;private Button sendback_button = null;private Button invalidate_button = null;private Button back_button = null;private Button daohang_button = null;private int list_index = -1;private ListView lv;public LinearLayout myRelative;String taskid[] = { "TaskNo.1", "TaskNo.2", "TaskNo.3", "TaskNo.4","TaskNo.5", "TaskNo.6", "TaskNo.7", "TaskNo.8", "TaskNo.9","TaskNo.10" };String machineid[] = { "MachineNo.1", "MachineNo.1", "MachineNo.1","MachineNo.1", "MachineNo.1", "MachineNo.1", "MachineNo.1","MachineNo.1", "MachineNo.1", "MachineNo.1" };String position[] = { "sjz", "sjz", "sjz", "sjz", "sjz", "sjz", "sjz","sjz", "sjz", "sjz" };String imageid[] = { "10123", "10124", "10125", "10126", "10127", "10123","10124", "10125", "10126", "10127" };String taskstatus[] = { "已完成", "已完成", "已完成", "已完成", "已完成", "已完成", "已完成","已完成", "已完成", "已完成" };@Overrideprotected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.taskoklayout);ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();for (int i = 0; i < taskid.length; i++) { HashMap<String, String> map1 = new HashMap<String, String>();map1.put("imageid", imageid);map1.put("taskid", taskid);map1.put("machineid", machineid);map1.put("position", position);map1.put("taskstatus", taskstatus);map1.put("daohang", "导航");mylist.add(map1);}SpecialAdapter adapter = new SpecialAdapter(this, mylist,R.layout.vlist, new String[] { "imageid", "taskid", "machineid","position", "taskstatus", "daohang" }, new int[] { R.id.imageid_textview, R.id.taskid_textview,R.id.machineid_textview, R.id.position,R.id.taskstatus, R.id.a07_ls_button });TextView t1 = new TextView(this);t1.setGravity(Gravity.CENTER);t1.setText("图片");t1.setBackgroundResource(R.drawable.bk);TextView t2 = new TextView(this);t2.setGravity(Gravity.CENTER);t2.setText("任务编号");t2.setBackgroundResource(R.drawable.bk);TextView t3 = new TextView(this);t3.setText("机械编号");t3.setGravity(Gravity.CENTER);t3.setBackgroundResource(R.drawable.bk);TextView t4 = new TextView(this);t4.setText("当前位置");t4.setGravity(Gravity.CENTER);t4.setBackgroundResource(R.drawable.bk);TextView t5 = new TextView(this);t5.setText("任务状态");t5.setGravity(Gravity.CENTER);t5.setBackgroundResource(R.drawable.bk);TextView t6 = new TextView(this);t6.setText("开始导航");t6.setGravity(Gravity.CENTER);t6.setBackgroundResource(R.drawable.bk);TextView t7 = new TextView(this);t7.setText("是否选择");t7.setGravity(Gravity.CENTER);t7.setBackgroundResource(R.drawable.bk);LinearLayout linear = new LinearLayout(this);linear.setBackgroundResource(R.drawable.bg_comment_grey);linear.addView(t1, 80, 45);linear.addView(t2, 100, 45);linear.addView(t3, 100, 45);linear.addView(t4, 140, 45);linear.addView(t5, 120, 45);linear.addView(t6, 80, 45);linear.addView(t7, 80, 45);lv = (ListView) findViewById(R.id.taskok_listView);//new ListView(this);lv.setHorizontalScrollBarEnabled(true);lv.setSelector(R.drawable.brick);lv.addHeaderView(linear);// 设置listHeader 始终位于列表顶部lv.setAdapter(adapter);//lv.setHorizontalScrollBarEnabled(horizontalScrollBarEnabled)//HorizontalScrollView hsv = (HorizontalScrollView) findViewById(R.id.HorizontalScrollView01);//new HorizontalScrollView(this);//System.out.println("" + hsv);//setContentView(hsv);// lv = (ListView)findViewById(R.layout.main);// lv.setHorizontalScrollBarEnabled(true);// lv.setSelector(R.drawable.bg_setting_tablerow);// lv.setAdapter(adapter);// setContentView(lv);initRes();}public void onBackPressed() { // TODO Auto-generated method stubSystem.out.println("按下返回键");return;}boolean initRes() { taskok_button = (Button) findViewById(R.id.taskok_button);sendback_button = (Button) findViewById(R.id.sendback_button);invalidate_button = (Button) findViewById(R.id.invalidate_button);daohang_button = (Button) findViewById(R.id.daohang_button);back_button = (Button) findViewById(R.id.back_button);setClickListener();return true;}// 根据参数flag决定去得第X列的内容,每行的内容用*号隔开String GetSelectItemData(int flag) { String return_str = null;for (int i = 0; i < list.getCount(); i++) { if (MyAdapter.isSelected.get(i)) { // TaskCheckViewHolder vHollder = (TaskCheckViewHolder)// list.getChildAt(flag).getTag();// return_str += vHollder.taskid_textview.getText().toString();// return_str += "*";// MyAdapter.}}return GlobalFunc.StrToHex(return_str);}boolean setClickListener() { taskok_button.setOnClickListener(new myButtonListener());sendback_button.setOnClickListener(new myButtonListener());invalidate_button.setOnClickListener(new myButtonListener());daohang_button.setOnClickListener(new myButtonListener());back_button.setOnClickListener(new myButtonListener());return true;}class myButtonListener implements OnClickListener { @Overridepublic void onClick(View v) { // TODO Auto-generated method stubIntent intent = new Intent();if (v.getId() == R.id.taskok_button) { GlobalFunc.ShowProgressDlg();// GetSelectItemData(1);} else if (v.getId() == R.id.sendback_button) { } else if (v.getId() == R.id.daohang_button) { } else if (v.getId() == R.id.back_button) { intent.setClass(TaskCheckOk_Activity.this,AppMenu_Activity.class);TaskCheckOk_Activity.this.startActivity(intent);} else if (v.getId() == R.id.invalidate_button) { }}}}class SpecialAdapter extends SimpleAdapter { private LayoutInflater mInflater;private listviewHolder holder;private int[] colors = new int[] { 0x30FF0000, 0x300000FF };public SpecialAdapter(Context context, List<? extends Map<String, ?>> data,int resource, String[] from, int[] to) { super(context, data, resource, from, to);mInflater = LayoutInflater.from(context);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent);final int temp_position = position;int colorPos = position % colors.length;if (colorPos == 1) { view.setBackgroundColor(Color.argb(250, 255, 255, 255));} else { view.setBackgroundColor(Color.argb(250, 224, 243, 250));}holder = new listviewHolder();// (listviewHolder)view.getTag();//System.out.println("" + holder);holder.machineid_textview = (TextView) view.findViewById(R.id.machineid_textview);holder.machineid_textview.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) { // TODO Auto-generated method stubSystem.out.println("机械编号--执行了点击事件,点击的行数为:" + temp_position);}});holder.taskid_textview = (TextView) view.findViewById(R.id.taskid_textview);holder.taskid_textview.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) { // TODO Auto-generated method stubSystem.out.println("任务编号--执行了点击事件,点击的行数为:" + temp_position);}});holder.daohang_button = (TextView) view.findViewById(R.id.a07_ls_button);holder.daohang_button.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) { // TODO Auto-generated method stubSystem.out.println("导航--执行了点击事件,点击的行数为:" + temp_position);}});holder.cbox = (CheckBox)view.findViewById(R.id.a07_ls_checkbox);holder.cbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stubif(isChecked){ System.out.println("复选框以选中,选中的行数为:" + temp_position);}}});return view;}class listviewHolder { public TextView taskid_textview;public TextView machineid_textview;public TextView position;public TextView taskStatus;public TextView daohang_button;public CheckBox cbox;}