android listview 动态布局 网格显示数据


声明,代码中一部分是摘自网络上,并不完全是自己写的
经过几天的请教,查找等,艰辛的过程,加上自己的修改,终于实现了自己满意的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">
<HorizontalScrollView
android: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>

activity
package 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[] = { "已完成", "已完成", "已完成", "已完成", "已完成", "已完成", "已完成",
"已完成", "已完成", "已完成" };

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.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 stub
System.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 {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent 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);
}

@Override
public 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() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("
机械编号--执行了点击事件,点击的行数为:" + temp_position);

}
});
holder.taskid_textview = (TextView) view
.findViewById(R.id.taskid_textview);
holder.taskid_textview.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("
任务编号--执行了点击事件,点击的行数为:" + temp_position);
}
});
holder.daohang_button = (TextView) view
.findViewById(R.id.a07_ls_button);
holder.daohang_button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("
导航--执行了点击事件,点击的行数为:" + temp_position);
}
});

holder.cbox = (CheckBox)view.findViewById(R.id.a07_ls_checkbox);
holder.cbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if(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;

}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM