【学习】ListView子控件的监听及刷新数据不变
2014-03-09 19:24
597 查看
listview是很有用的一个控件。但我觉得这个真是难。折磨死我了。
废话不谈了。关于listview的基础的知识也不讲了。
listview中添加控件并且对控件进行监听。
开始的时候我直接在设置了adpater后就为listview里面的控件增加监听函数。但是却发现不仅控件的监听器无法促发。就连listview本身也无法触发。看了很多资料。算是见识了。其实就是个焦点的问题。(这个问题以后再讨论。我也没搞透)
上一张图先
在这个item中我放了两个button。要实现对中间文本的加减控制。开始的时候我用的是simpleadapter。发现无论怎么弄都无法完成这个任务。因为根本触发不了button的监听器。后来得大神相助。给力的一段代码。自定义adpter继承baseadapter
而为什么这样做就可以达到对子控件监听的目的呢。
这就要探讨一下listview的显示问题。相信这个问题已经有很多先辈们说过了。我这里说一下就是让自己以后复习起来可以更方便一些。
listview每次显示一个item都会回调
第二个参数就是一个item的view了。我觉得系统传入这个参数就是为了方便returen回去的。
开始创建item的时候是没有item的。所以没有view。传入的也是一个空值。到了后来传入的是已经存在的view了。这个大家可以百度一下。网上太多了。
而在这个里面。最让我头疼就是中间的文本显示数量的那个。点击add或者sub它发生变化。但是等这个item到了阴影处再回来的时候它又变成0了。
问了很多人。看来很多资料。还是搞不定。可能是基础比较差。但是学习嘛。就是要不停客服苦难。在经历了无数次。un幸运之后。终于是给搞定了。
要想把这个数量对应的保存起来。然后再geiview中去判断。这个文本是不是用来显示数量的。
(这里我只是实现了add的数据保存。)
好了。终于是几天的熬夜没有白费啊。虽然过程很坎坷。一个人写东西。没人教。很心酸。碰到问题很棘手。但身为一个要编程的男人。这都不是事。
废话不谈了。关于listview的基础的知识也不讲了。
listview中添加控件并且对控件进行监听。
开始的时候我直接在设置了adpater后就为listview里面的控件增加监听函数。但是却发现不仅控件的监听器无法促发。就连listview本身也无法触发。看了很多资料。算是见识了。其实就是个焦点的问题。(这个问题以后再讨论。我也没搞透)
上一张图先
在这个item中我放了两个button。要实现对中间文本的加减控制。开始的时候我用的是simpleadapter。发现无论怎么弄都无法完成这个任务。因为根本触发不了button的监听器。后来得大神相助。给力的一段代码。自定义adpter继承baseadapter
package com.example.test; import java.util.HashMap; import java.util.List; import java.util.Map; import android.R.integer; import android.app.AlertDialog; import android.content.Context; import android.content.SharedPreferences; import android.util.Log; import android.util.Printer; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.TextView; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.Toast; public class MySimpleAdapter extends BaseAdapter { private LayoutInflater mInflater; private List<Map<String, Object>> list; private int layoutID; private String flag[]; private int ItemIDs[]; private Context context; private String p; private String mynums[]; public MySimpleAdapter(Context context, List<Map<String, Object>> list, int layoutID, String flag[], int ItemIDs[],String mynums[]) { this.mInflater = LayoutInflater.from(context); this.list = list; this.layoutID = layoutID; this.flag = flag; this.ItemIDs = ItemIDs; this.context = context; this.mynums=mynums; this.p="0"; } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return 0; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) convertView = mInflater.inflate(layoutID, null); for (int i = 0; i < flag.length; i++) {// 备注1 if (convertView.findViewById(ItemIDs[i]) instanceof ImageView) { ImageView iv = (ImageView) convertView.findViewById(ItemIDs[i]); iv.setImageResource((Integer) list.get(position).get(flag[i])); } else if (convertView.findViewById(ItemIDs[i]) instanceof TextView) { TextView tv = (TextView) convertView.findViewById(ItemIDs[i]); if (tv.getId() == R.id.foodtext) { tv.setText(this.mynums[position]); break; } tv.setText((String) list.get(position).get(flag[i])); } else { // ...备注2 } } final TextView tv = (TextView) convertView.findViewById(R.id.foodtext); ((Button) convertView.findViewById(R.id.SUB)) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String n = (String) tv.getText(); int m = Integer.parseInt(n); if (m == 1) { tv.setTextColor(android.graphics.Color.BLACK); m--; tv.setText(m + ""); return; } if (m == 0) return; m--; tv.setText(m + ""); tv.setTextColor(android.graphics.Color.RED); } }); // 为加号的按钮添加监听事件 ((Button) convertView.findViewById(R.id.ADD)) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String n = (String) tv.getText(); int m = Integer.parseInt(n); m++; tv.setText(m + ""); n = m + ""; tv.setTextColor(android.graphics.Color.BLUE); p=n; mynums[position]=p; } }); return convertView; } }
而为什么这样做就可以达到对子控件监听的目的呢。
这就要探讨一下listview的显示问题。相信这个问题已经有很多先辈们说过了。我这里说一下就是让自己以后复习起来可以更方便一些。
listview每次显示一个item都会回调
public View getView(final int position, View convertView, ViewGroup parent)这个函数有三个参数。第一个是这个item在整个列表中的位置。第一个item就是position 0第二个就是position 1.
第二个参数就是一个item的view了。我觉得系统传入这个参数就是为了方便returen回去的。
开始创建item的时候是没有item的。所以没有view。传入的也是一个空值。到了后来传入的是已经存在的view了。这个大家可以百度一下。网上太多了。
而在这个里面。最让我头疼就是中间的文本显示数量的那个。点击add或者sub它发生变化。但是等这个item到了阴影处再回来的时候它又变成0了。
问了很多人。看来很多资料。还是搞不定。可能是基础比较差。但是学习嘛。就是要不停客服苦难。在经历了无数次。un幸运之后。终于是给搞定了。
要想把这个数量对应的保存起来。然后再geiview中去判断。这个文本是不是用来显示数量的。
mynums[position]=p;这句代码是为了将数量放进数组中存储起来。(开始的时候我的思想也是这样的。但是在初始化数组的时候一直报错。后来就直接当做参数让它传进来。)
if (tv.getId() == R.id.foodtext) { tv.setText(this.mynums[position]); break; }这个判断就是为了判断这个文本是不是用来显示数量的。如果是就显示刚才数组对应的值。这样就达到了保存数据的作用了。
(这里我只是实现了add的数据保存。)
好了。终于是几天的熬夜没有白费啊。虽然过程很坎坷。一个人写东西。没人教。很心酸。碰到问题很棘手。但身为一个要编程的男人。这都不是事。
相关文章推荐
- 打造Android集合控件数据绑定(支持添加监听,支持AbsListView与RecycleView,支持异步加载等)(一)基础篇
- ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听.
- ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听
- 打造Android集合控件数据绑定(支持添加监听,支持AbsListView与RecycleView,支持异步加载等)(二)ORM注解以及解析
- ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听.
- 打造Android集合控件数据绑定(支持添加监听,支持AbsListView与RecycleView,支持异步加载等)(三)具体实现
- 怎样给listview的item中的子控件设置监听及时时刷新
- listview刷新与内部控件的监听
- ListView中Item控件监听及异步刷新的实现
- listview自定义adapter数据改变后刷新界面
- 在适配器的构造方法添加假数据,然后请求数据后listview等的图片显示不完整,刷新之后才显示的问题。
- 关于ListView中notifyDataSetChanged()刷新数据不更新原因
- Android中ListView数据使用sAdapter.notifyDataSetChanged();方法不刷新的问题
- iOS开发UI篇—自定义瀑布流控件(蘑菇街数据刷新操作)
- 关于ListView中notifyDataSetChanged()刷新数据不更新原因
- 自定义控件之上拉刷新下拉加载RefreshListView
- Android控件——ListView之Adapter提供数据(其四)
- 20101022 学习笔记:js刷新iframe并给iframe中的控件赋值
- asp.net学习之 数据绑定控件--表格绑定控件
- ListView 刷新加载控件