自定义列表视图

通过继承BaseAdapter写一个子类,可以创建自定义列表视图:


public class MyListAdapter extends BaseAdapter {

private LayoutInflater mInflater;//声明一个LayoutInflater类变量

private Context mContext;//声明一个Context类变量

private List<Map<String,String>> mitem;//声明一个元素为<Map<String,String>>类型的List对象,存储testitem的值

private Map<String,Integer> selectedtestItem = new HashMap<String,Integer>();//声明一个Map对象,用HashMap来实现

private List<Map<String, String>> mData; // 声明一个元素为<Map<String,String>>类型的List对象,存储的editTex值

private Map<String, String> editorValue = new HashMap<String, String>();//声明一个Map对象,用HashMap来实现

private List<Map<String,String>> mParameter;//用于保存parameter_edit参数值

//private static HashMap<Integer, Boolean> isSelected;//声明一个HashMap<Integer,Boolean>类型的变量

private String[] testItems;

private String promptForSpinner[] = {"0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"};

public MyListAdapter(Context context,String[] testItems) {//构造函数

// TODO Auto-generated constructor stub

mInflater = LayoutInflater.from(context);//获得LayoutInflater

this.testItems = testItems;

puttestitemName();

}

private void puttestitemName()

{

for (String str : promptForSpinner) {

selectedtestItem.put(str,0);

}

/*for(int i=0;i<20;i++){

selectedtestItem.put("list_item_Name", 0);//allValues保存以项目名称为键值、0为数值的一系列成对的数据

}*/

}

public void setData( List<Map<String, String>> data) {//初始化Lisr类型的对象

mData = data;

mParameter=data;

init();

}

private void init() {//实现初始化List类型的对象的方法

editorValue.clear();

/*isSelected = new HashMap<Integer, Boolean>();

if (mData != null) {

for (int i = 0; i < mData.size(); i++) {

isSelected.put(i, false);

}

}*/

}

public Map<String,Integer> getSelectedtestItem()

{

return selectedtestItem;

}

public List<Map<String,String>> getmData()

{

return mData;

}

public List<Map<String,String>> getmParameter()

{

return mParameter;

}

@Override

public int getCount() {//获得List类型对象的长度;

// TODO Auto-generated method stub

if (mData != null) {

return mData.size();

}

return 0;

}

@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return null;

}

@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return 0;

}

private Integer index = -1;//声明并初始化一个整型变量index

//Adapter是ListView界面与数据之间的桥梁。当列表里的每一项要显示时,都会调用Adapter的getView方法返回一个View。

@Override

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

// TODO Auto-generated method stub

Log.d("zhang", "position = " + position);//Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择.

final ViewHolder holder;

if (convertView == null) {

convertView = mInflater.inflate(R.layout.listitem, null);//实例化R.layout.list为converView的View对象

holder = new ViewHolder();//ViewHolder就是一个静态类,使用它缓存了数据的视图(View),加快UI的响应速度。

//holder.checkBox = (CheckBox) convertView

//.findViewById(R.id.checkbox);

holder.testitemSpinner = (Spinner)convertView.findViewById(R.id.testitems_select);

//if(holder.testitemSpinner.getCount()==0)

//if(holder.testitemSpinner.getPrompt()==null)

//{

ArrayAdapter<String> a = new ArrayAdapter<String>(

convertView.getContext(),android.R.layout.simple_spinner_item,testItems);

holder.testitemSpinner.setAdapter(a);

//}

//holder.testitemSpinner.setTag(position);

holder.testitemSpinner

.setOnItemSelectedListener(new ItemClickSelectListener(

holder));//为checkinfo_item_value(Spinner)添加ItemSelectedListener监听器

holder.unit_text = (TextView) convertView.findViewById(R.id.unit_text);

//holder.textView = (TextView) convertView.findViewById(R.id.text);

holder.downbtn = (Button) convertView.findViewById(R.id.downbtn);

holder.downbtn.setFocusable(false);

holder.downbtn.setFocusableInTouchMode(false);

holder.upbtn = (Button) convertView.findViewById(R.id.upbtn);

holder.upbtn.setFocusable(false);

holder.upbtn.setFocusableInTouchMode(false);

holder.editbtn = (Button)convertView.findViewById(R.id.editbtn);

holder.editbtn.setFocusable(false);

holder.editbtn.setFocusableInTouchMode(false);

/*times_edit控件*/

holder.numEdit = (EditText) convertView.findViewById(R.id.times_edit);

holder.numEdit.setTag(position);//给numEdit添加一个格外的数据,使用getTag()可将数据取出;

holder.numEdit.setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

// TODO Auto-generated method stub

if (event.getAction() == MotionEvent.ACTION_UP) {

index = (Integer) v.getTag();

}

return false;

}

});

/***********/

/*parameter_edti控件*/

holder.paraEdit = (EditText) convertView.findViewById(R.id.parameter_edit);

holder.paraEdit.setTag(position);//给numEdit添加一个格外的数据,使用getTag()可将数据取出;

holder.paraEdit.setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

// TODO Auto-generated method stub

if (event.getAction() == MotionEvent.ACTION_UP) {

index = (Integer) v.getTag();

}

return false;

}

});

/*******/

/*为times_edit控件添加编辑响应*/

class MyTextWatcher implements TextWatcher {

public MyTextWatcher(ViewHolder holder) {

mHolder = holder;

}

private ViewHolder mHolder;

@Override

public void beforeTextChanged(CharSequence s, int start,

int count, int after) {

// TODO Auto-generated method stub

}

@Override

public void onTextChanged(CharSequence s, int start,

int before, int count) {

// TODO Auto-generated method stub

}

@Override

public void afterTextChanged(Editable s) {

// TODO Auto-generated method stub

if (s != null && !"".equals(s.toString())) {

int position = (Integer) mHolder.numEdit.getTag();

// 当EditText数据发生改变的时候存到data变量中

mData.get(position).put("list_item_timesvalue",

s.toString());

}

}

}

holder.numEdit.addTextChangedListener(new MyTextWatcher(holder));

/*********/

/*为parameter_edit控件添加编辑响应*/

class ParaTextWatcher implements TextWatcher {

public ParaTextWatcher(ViewHolder holder) {

mHolder = holder;

}

private ViewHolder mHolder;

@Override

public void beforeTextChanged(CharSequence s, int start,

int count, int after) {

// TODO Auto-generated method stub

}

@Override

public void onTextChanged(CharSequence s, int start,

int before, int count) {

// TODO Auto-generated method stub

}

@Override

public void afterTextChanged(Editable s) {

// TODO Auto-generated method stub

if (s != null && !"".equals(s.toString())) {

int position = (Integer) mHolder.numEdit.getTag();

// 当EditText数据发生改变的时候存到data变量中

mParameter.get(position).put("list_item_parameter",

s.toString());

}

}

}

holder.paraEdit.addTextChangedListener(new ParaTextWatcher(holder));

/********/

holder.downbtn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

int position = (Integer) holder.numEdit.getTag();

Log.d("zhang", "clickposition = " + position);

String edittextStr = holder.numEdit.getText().toString();

int num = Integer.parseInt(edittextStr);

num--;

mData.get(position).put("list_item_timesvalue", num+"");

holder.numEdit.setText(num+"");

}

});

holder.upbtn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

int position = (Integer) holder.numEdit.getTag();

String edittextStr = holder.numEdit.getText().toString();

int num = Integer.parseInt(edittextStr);

num++;

mData.get(position).put("list_item_timesvalue", num+"");

holder.numEdit.setText(num+"");

}

});

convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

holder.numEdit.setTag(position);

holder.paraEdit.setTag(position);

}

/*holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

// TODO Auto-generated method stub

int position = (Integer) holder.numEdit.getTag();

isSelected.put(position, isChecked);//将对应position键值的数值设置为isChecked()返回的值

}

});

holder.checkBox.setChecked(isSelected.get(position));//更新CheckBox的选择状态*/

holder.testitemSpinner.setPrompt(promptForSpinner[position]);

int spinnerOptionPosition = selectedtestItem.get(promptForSpinner[position]);

holder.testitemSpinner.setSelection(spinnerOptionPosition);

//if ((spinnerOptionPosition==4)||(spinnerOptionPosition==5))

//holder.unit_text.setText("hz");

//else

//holder.unit_text.setText("__");

Object value = mData.get(position).get("list_item_timesvalue");

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

holder.numEdit.setText(value.toString());

} else {

holder.numEdit.setText("200");

}

holder.numEdit.clearFocus();

if (index != -1 && index == position) {

holder.numEdit.requestFocus();

}

Object value2 = mParameter.get(position).get("list_item_parameter");

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

holder.paraEdit.setText(value2.toString());

} else {

holder.paraEdit.setText("200");

}

holder.paraEdit.clearFocus();

if (index != -1 && index == position) {

holder.paraEdit.requestFocus();

}

return convertView;

}

/*public HashMap<Integer,Boolean> getIsSelected() {

return isSelected;

}*/

/*public void setIsSelected(HashMap<Integer,Boolean> isSelected) {

this.isSelected = isSelected;

}*/

public class ViewHolder {

Spinner testitemSpinner;

Button editbtn;

Button downbtn;

EditText numEdit;

EditText paraEdit;

TextView unit_text;

Button upbtn;

}

private class ItemClickSelectListener implements OnItemSelectedListener {

//Spinner testitemSpinner;

ViewHolder Iholder;

//EditText Iedit;

public ItemClickSelectListener(ViewHolder holder) {

//this.testitemSpinner = testitemSpinner;

this.Iholder = holder;

}

@Override

public void onItemSelected(AdapterView<?> parent, View view,

int position, long id) {

//关键代码

selectedtestItem.put(Iholder.testitemSpinner.getPrompt().toString(), position);

/*根据所选的测试项目,改变第二参数的不同单位和信息*/

if((position==4)||(position==5))

Iholder.unit_text.setText("hz");

else

Iholder.unit_text.setText("un");

if((position==0)||(position==1)||(position==2)||(position==6)||(position==7)||(position==8))

{

//Iholder.paraEdit.setText("null");

Iholder.paraEdit.setVisibility(View.INVISIBLE);

Iholder.unit_text.setVisibility(View.INVISIBLE);

}

else

{

//Iholder.paraEdit.setText("200");

Iholder.paraEdit.setVisibility(View.VISIBLE);

Iholder.unit_text.setVisibility(View.VISIBLE);

}

/***********/

if(position==8)

Iholder.editbtn.setVisibility(View.VISIBLE);

else

Iholder.editbtn.setVisibility(View.INVISIBLE);

//int p = (Integer) testitemSpinner.getTag();

//selectedtestItem.get(p).put("list_item_Name",

//position);

}

@Override

public void onNothingSelected(AdapterView<?> arg0) {

}

}

}


ListView listView = (ListView) findViewById(R.id.list);

MyListAdapter mAdapter = new MyListAdapter(this,testItems);//testItems是一个String数组;

listView.setAdapter(mAdapter);

时间: 2024-10-16 06:04:24

自定义列表视图的相关文章

SharePoint开发 - Excel数据导入到SharePoint自定义列表(数据视图方式)

本篇讲解一个有些新颖的SharePoint实例应用,给甲方做过项目的都有过体会,数据太多了,客户有Excel,要求实现批量导入. 效果图大致如下所示 此实例是借用列表的数据视图实现导入,数据视图类似Excel,所以可以直接在上面编辑,甚至从Excel中直接粘贴进去,然后点击保存将数据插入到列表中. 首先,我们需要有一个列表,这个列表的字段跟Excel是对应的,在我的实例中选择创建列表定义及列表实例(怎么创建项目不多废话了) 创建方法戳这里 写完列表实例之后,添加一个作用于列表的事件接收器,用来处

Swift基础--使用TableViewController自定义列表

首先建立一个swift项目,把storyboard的内容删掉,添加一个Navigation Controller,然后设置storyboard对应界面的class,在Navigation Controller界面设置View Controller的is initial View Controller,这里使用的自定义列表内容,所以要新建一个继承UITableViewCell的类,然后设置storyboard中Table View的Prototype Cells的class,对于点击item进入详

自定义适配器视图getview实现方法比较

Android开发之中,listview是一个非常重要的组件,它以列表的形式显示用户的数据,用户可以自由的定义LsitView每一列的内容,样式,很多时候使用ListView都需要使用自定义Adapter,自定义Adapter之中最重要的莫过于getView方法了. getView方法实现主要的三种方法: 1.第一种就是每次都给adapter new一个View载入布局. 例如: public View getView(int position, View convertView, ViewGr

sharepoint2010 创建自定义列表

sharepoint2010 创建自定义列表 分类: sharepoint20102014-04-04 14:06 106人阅读 评论(0) 收藏 举报 转:http://boke.25k5.com/kan77298.html 如何创建自定义列表 首先了解创建自定义列表中涉及到的几个名词:栏.内容类型. ①栏:栏即列.字段(Field),MSDN中给出的解释为:“字段”一词在 SharePoint Foundation 开发中有两个关系非常密切的含义.有时它指的是列表中的列,但如果提到单个列表项

【Anroid】第9章 列表视图(1)--ListView相关类及其适配器

分类:C#.Android.VS2015: 创建日期:2016-02-18 一.简介 列表视图(ListView)是Android应用程序中使用最频繁的UI组件,从无处不在短菜单选项列表到冗长的联系人或internet收藏夹列表--都会用它来实现. ListView控件的用法非常灵活,既可以使用内置的视图呈现基本的样式,也可以用自定义视图呈现各种特殊的视觉效果. 要完全掌握Android提供的ListView控件的用法,需要解决下面的问题: (1)如何用Android内置的视图呈现列表视图中的每

【iOS7的一些总结】9、用列表显示内容(上):列表视图UITableView

列表视图,顾名思义就是将数据的内容用列表的形式显示在屏幕上的视图.在ios中列表视图以UITableView实现,这个类在实际应用中非常的频繁,但是对于初学者来说不是非常容易理解.这里将UITableView的主要用法总结一下以备查. UITableView定义在头文件UITableView.h中,具体的定义可以查看官方文档:从定义中可以看出,UITableView继承自UIScrollView类,因此在支持方便地显示列表数据的同时,还天生支持垂直滚动操作.组成列表的每一个元素称为UITable

Android学习笔记二十四之ListView列表视图二

Android学习笔记二十四之ListView列表视图二 前面一篇我们介绍了常用的几种适配器的简单实现和ListView的简单使用,这一篇中,我们介绍一下ListView的优化和一些其它的问题. ListView优化方法一 在ListView中,我们最常用的就是自定义Adapter,在我们自定义Adapter中,需要实现两个比较重要的方法getCount()和getView(),前者是负责计算ListView的总Item数,后者是生成Item,有多少个Item就会调用getView()方法多少次

odoo-开发笔记 列表视图 增加记录弹出窗口效果

editable="bottom" 增加该标签的效果是,添加记录的时候,在原列表视图上一行一行添加; 去掉该标签之后,那么增加新记录的时候,会以弹出窗口的方式实现. 如果弹出的窗口显示的效果不好,那么可以自定义form视图. 原文地址:https://www.cnblogs.com/hellojesson/p/8653155.html

列表视图

ListView 是一个显示一列可滚动项目的视图组. 系统使用 Adapter 自动将列表项目插入列表,适配器从来源(例如数组或数据库查询)提取内容,并将每个项目结果转换为视图放置到列表中. 有关如何使用适配器动态插入视图的介绍,请阅读使用适配器构建布局. 使用加载器 使用 CursorLoader 是以异步任务形式查询 Cursor 的标准方式,可避免查询阻塞应用的主线程. 当 CursorLoader 接收到 Cursor 结果时,LoaderCallbacks 会收到对 onLoadFin