自定义列表视图

通过继承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

//AdapterListView界面与数据之间的桥梁。当列表里的每一项要显示时,都会调用AdaptergetView方法返回一个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调试的意思,但他会输出上层的信息,过滤起来可以通过DDMSLogcat标签来选择.

        final ViewHolder holder;

        if (convertView == null) {

            convertView = mInflater.inflate(R.layout.listitem, null);//实例化R.layout.listconverViewView对象

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


 

转载于:https://www.cnblogs.com/zhlforhe/p/4794710.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机专业答辩模板,论文答辩模板-计算机专业.ppt

《论文答辩模板-计算机专业.ppt》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《论文答辩模板-计算机专业.ppt(9页珍藏版)》请在装配图网上搜索。1、基于S2SH论坛系统的设计与实现,专业&#xff1a; 姓名&#xff1a; 学号&#xff1a; 指导教师&#xff1a;,(附)论文…

springmvc请求返回一个字符_SpringMVC系列之Web利器SpringMVC

课程简介&#xff1a;课程目标&#xff1a;了解SpringMVC和Spring的关系&#xff0c;能够使用SpringMVC框架开发自己的Web应用。整合Spring , SpringMVC , MyBatis搭建项目开发环境&#xff0c;理解三层架构和MVC模式适用人群&#xff1a;适合对Java基础知识应用自如&#xff0…

一次完整较为渗透过程

步骤一&#xff1a; 利用阿D浏览器通过https&#xff1a;//s.bt.gg 注入关键字扫描发现注入点&#xff1a; http://www.rqyl.gov.cn/*****.php?ID153 用啊D跑不出账号密码 步骤二&#xff1a; 手工注入http://www.rqyl.gov.cn/*****.php?ID153 and 11 、and12出错 猜字段ht…

html5 filereader读取文件,H5的FileReader分布读取文件应该如何使用以及其方法简介...

这次给大家带来H5的FileReader分布读取文件应该如何使用以及其方法简介&#xff0c;H5的FileReader分布读取文件的使用以及其方法简介的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。先介绍一下H5中FileReader的一些方法以及事件FileReader方法名称 作…

mysql 查询某一主键在那些表中中被设置为外键了

use information_schema; show tables; select * from KEY_COLUMN_USAGE where COLUMN_NAMEareaid; 转载于:https://www.cnblogs.com/liaojie970/p/4799750.html

室内空气流动原理图_新风系统原理图—新风系统原理介绍

如今我们在进行新家的装修的时候&#xff0c;不少人为了家人的健康着想&#xff0c;都在选购家电的同时会选择安装一款新风系统。但是尽管如此&#xff0c;大家对新风系统原理其实并不了解&#xff0c;更不要提新风系统各部分的原理了&#xff0c;下面小编就结合新风系统原理图…

计算机网络线路争用,计算机网络系统集成复习要点

计算机网络系统集成复习要点计算机网络系统集成复习要点1.在信息领域&#xff0c;对于系统集成一般分为软件集成、硬件集成和网络系统集成。2.按网络覆盖范围的大小&#xff0c;将计算机网络分为局域网(LAN)、城域网(MAN)、广域网(WAN)和互联网。3. 计算机网络拓扑结构是指一个…

mrsql查询第二高的成绩_mysql-查找用户的最高分数和相关的详细信息

我有一个表,用户可以在其中存储分数和有关该分数的其他信息(例如,分数注释或花费的时间等).我想要一个mysql查询,该查询可找到每个用户的个人最佳成绩及其相关的注释和时间等我尝试使用的是这样的&#xff1a;SELECT *,MAX(score)FROM table GROUP BY(用户)这样做的问题是,虽然…

centos 7 防火墙和端口配置

开启redis端口&#xff0c;修改防火墙配置文件 vi /etc/sysconfig/iptables 加入端口配置 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379:7000 -j AC…

计算机网络实验11.6.1,6.111 2004春季课程:数位系统概论实验(Introductory Digital Systems Laboratory, Spring 2004)...

摘要&#xff1a;Lectures and labs on digital logic, flipflops, PALs, counters, timing, synchronization, finite-state machines, and microprogrammed systems prepare students for the design and implementation of a final project of their choice: games, music, …

v380pro设备连接失败_天猫精灵可以连接台式电脑使用吗?需要什么东西? 安装操作是哪几个步骤? 最好有图片解说!...

使用语音将天猫精灵调到【蓝牙配对】&#xff1b;打开电脑的蓝牙适配界面&#xff0c;让电脑找到天猫精灵&#xff0c;稍等片刻&#xff0c;点击【使用远程装置的扬声器聆听来自此PC的音频】后的连接&#xff1b;最后调整音量即可。以下是详细介绍&#xff1a;1、对天猫精灵说【…

SWOT分析是神马?

SWOT分析是思维的工具来理解事物的方式。人生在世&#xff0c;作为一个独立的实体&#xff0c;不可避免地需要思考的问题。除非你是猪。猪比这更聪明。眠质量&#xff0c;都要完爆白领&#xff0c;蓝领和金领们。SWOT分析分为四个象限。我们用一头名猪——麦兜来打个例如就清楚…

hive 日誌怎麼查看_Hive各个日志里都存放了什么信息?

审计日志首先&#xff0c;对于审计日志来说&#xff0c;记录了某个时间点某个用户从哪个IP发起对HiveServer或者MetaStore的请求以及记录执行的语句是什么。如下的HiveServer审计日志&#xff0c;表示在2016-02-01 14:51:22 用户user_chen向HiveServer发起了show tables请求&am…

语音媒体和信令的测试软件,IP多媒体子系统信令分析工具的设计与实现

摘要&#xff1a;IP多媒体子系统(InternetProtocolMultimediaSubsystem,IMS)为基于IP的移动和固定通信融合提供了基础,并被业界认为是网络演进的一个重要阶段.与此同时,信令分析工具一直被电信运营商,设备供应商,测试仪器厂商广泛而深入的关注.一款优秀的信令分析工具,可以使设…

大小写转换

1 ;小写字母的ASCII码比大写字母的ASCII码的值大20H。2 ;比如大写字母A的ASCII值为01000001 小写字母a的ASCII码为&#xff1a;011000013 ;公式为 a(01100001) - 20H(100000) A(01000001)4 ;A(01000001) 20H(100000) a(01100001)5 assume cs:codesg,ds:datasg6 7 datasg seg…

四象限法推导lm曲线_试用几何方法推导IS曲线(四象限法)

【简答题】请根据自己的实际情况,撰写一份适合自己的“征婚启事”。内容积极健康。文体,字数等不限【填空题】由一棵二叉树的前序序列和 序列可唯一确定这棵二叉树。 (1.0分)【判断题】完全二叉树一定是满二查树。 (1.0分)【判断题】二叉树的前序遍历中,任意一个结点均处于其子…

IDE-Ecplise-代码注释 模版 编码规范 配色

说明&#xff1a; 代码注释主要用于方便代码后期维护&#xff0c;编码规范&#xff0c;增加代码阅读性和维护性。因网上看到的很多博客中片段局多&#xff0c;故整理后重写一篇&#xff0c;方便交流学习。 先看下加过注释模版后的效果。如上图所示&#xff0c;创建类&#xff0…

通过路由远程计算机重启,华为无线路由器三种常用重启的方法

日常重启无线路由器并不是一个高难度动作&#xff0c;但是你了解华为(HUAWEI)家用无线路由器的三种常用的重启的方法吗&#xff1f;这三种方法也适用于绝大多数品牌的路由器&#xff0c;只不过在某个细节上略有区别。华为路由器的三种常用重启方法分别是&#xff1a;硬重启、软…

个人信息管理系统代码_学生信息管理系统(springboot + vue)

学生信息管理系统零、基础项目为前后分离项目1、前端(front-end)基于 vue-admin-template 开发2、后端(rear-end)Jdk8Maven3MySQL5.7SpringBoot2SQLYog一、功能模块图图片.png二、系统预览1、登录登录.png2、首页首页.png3、查看学生信息查看学生信息.png4、编辑学生信息编辑学…

苹果手机6s运营商在哪里显示无服务器,iPhone6s信号很弱或无服务如何解决【解决方法】...

很多果粉都遇到过自己的手机常常“无服务”或者信号很弱的情况。 iphone6s 信号很弱或无服务怎么办&#xff1f;iPhone手机信号不好的原因有很多&#xff0c;排除SIM卡&#xff0c;手机本身硬件故障等问题&#xff0c;你可以尝试以下方法“修复”你的手机信号问题。1、开关飞行…