Android ListView 按钮点击状态混乱之解决方案
2013-08-13 15:19
253 查看
关于ListView条目中按钮的点击状态滑动混乱的问题,写在这里旨在记录一下并且和大家交流一下。
废话不多说直接上代码:
关键的东西都在Adapter这个类中,关键的地方都有注释:
项目完整源代码下载:http://download.csdn.net/detail/jaderock/5925863
废话不多说直接上代码:
关键的东西都在Adapter这个类中,关键的地方都有注释:
package jaderock.listview; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.TextView; /** * 自定义Adapter * @author JadeRock * @date 2013-08-13 * @version 1.0 */ @SuppressWarnings("all") public class MyAdapter extends BaseAdapter { private List lists; private Context context; private ViewHolder holder; // 用来记录按钮状态的Map public static Map<Integer, Boolean> isChecked; public MyAdapter(Context _Context,List _list){ this.lists = _list; this.context = _Context; init(); // 一定要在这里调用,在构造Adapter对象时方便初始化 } class ViewHolder { private TextView mTV; private Button mBT; } // 初使化操作,默认都是false private void init() { isChecked = new HashMap<Integer, Boolean>(); for (int i = 0; i < lists.size(); i++){ isChecked.put(i, false); } } @Override public int getCount() { return lists.size(); } @Override public String getItem(int position) { return (String) lists.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView!=null){ holder = (ViewHolder) convertView.getTag(); }else { convertView = LayoutInflater.from(context).inflate(R.layout.item, null); holder = new ViewHolder(); holder.mBT = (Button) convertView.findViewById(R.id.btn); holder.mTV = (TextView) convertView.findViewById(R.id.tv); convertView.setTag(holder); } String text = (String) lists.get(position); if (text != null){ holder.mTV.setText(text); } holder.mBT.setOnClickListener(new btClick(position)); /* * 在复用时对其进行判断,根据其状态来显示相应的内容,这样在滑动时条目就不会再错乱了 */ if (isChecked.get(position) == true){ holder.mBT.setBackgroundResource(R.drawable.jc_yes); }else { holder.mBT.setBackgroundResource(R.drawable.jc_no); } return convertView; } /* * 此为listview条目中的按钮点击事件的写法 */ class btClick implements OnClickListener{ private int position; public btClick(int pos){ // 在构造时将position传给它这样就知道点击的是哪个条目的按钮 this.position = pos; } @Override public void onClick(View v) { int vid=v.getId(); if (vid == holder.mBT.getId()){ if (isChecked.get(position) == false){ isChecked.put(position, true); // 根据点击的情况来将其位置和相应的状态存入 holder.mBT.setBackgroundResource(R.drawable.jc_yes); } else if (isChecked.get(position) == true){ isChecked.put(position, false); // 根据点击的情况来将其位置和相应的状态存入 holder.mBT.setBackgroundResource(R.drawable.jc_no); } notifyDataSetChanged(); } } } }应用截图:
项目完整源代码下载:http://download.csdn.net/detail/jaderock/5925863
相关文章推荐
- Android ListView条目按钮点击状态混乱解决方案
- ListView 按钮点击状态混乱之解决
- android ListView 中CheckBox选中后,状态混乱的解决方案
- Android Listview 按钮点击状态错乱之解决
- android 自定义ListView 使其带单选框按钮,并解决item点击不响应的问题
- Android中Listview点击item不变颜色及设置listselector 无效的解决方案
- 【Android开发入门】关于ListView中按钮监听器设置的解决方案
- android gridview默认显示部分数据,点击按钮显示全部,再点击回到默认状态,选中变颜色
- Android ListView 常见问题汇总 checkbox 点击 复用混乱
- android导航条上面点击返回按钮返回上一个状态(从activity返回fragment)
- ListView可回收引起CheckBox选中状态混乱的解决方案
- Android ListView item中有按钮(Button)不能点击或者条目不能点击的问题
- Android 点击按钮弹出ListView对话框
- Android中listview条目中按钮点击事件的实现
- 点击ListView的item时,避免导致item中的按钮的背景被改动的解决方案
- android ListView/Recyclerview滚动时自动调用onCheckedChanged导致CheckBox状态混乱的解决办法
- listview乱跳问题-listview乱跳问题:最后状态正确,就是执行动画过程有问题,点击某一个条目中的展开全文按钮,其它的条目也都会走一下动画展开一下,随后又恢复。但最后好、状态都是正确的。
- Android 用state list drawable动态改变按钮点击前后的状态
- Android类似QQ左划出现删除按钮点击效果的ListView
- android中ListView点击和里边按钮或ImageView点击不能同时生效问题解决