新人做了一个带有多选的listview示例,同时请教一个问题!

Smile丶Ho 2015-02-01 06:25:21
之前在网上找的大神的代码做了个listview上多选的功能,具体哪位大神我也给忘了!

然后,他是通过重写一个方法 继承了BaseAdapter来实现多选功能

这个可以用在类似便签这种需要多选删除的项目上!

下面我会给上我写的一个项目,同时也希望有大神能帮我解决以下问题:

我现在想给listview每一个item都给上一个背景,但是我不知道该怎么做!

界面图片:


源码下载:http://download.csdn.net/download/ca13660049466/8414835

这个这个类的代码:


package com.example.checkboxtestmode;

import java.util.HashMap;
import java.util.Map;
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.TextView;
import com.example.checkboxtestmode.R;

public class SelectMore extends BaseAdapter {
private Context mContext;
private String[] mListArrays;
private LayoutInflater mInflater;
public Map<Integer,Boolean> mCBFlag = null;

@SuppressLint("UseSparseArrays")
public SelectMore(Context c,String[] arrays){
this.mContext = c;
this.mListArrays = arrays;
mInflater = LayoutInflater.from(mContext);
mCBFlag = new HashMap<Integer, Boolean>();
init();
}
void init(){
for (int i = 0; i < mListArrays.length; i++) {
mCBFlag.put(i, false);
}
}
@Override
public int getCount() {
return mListArrays.length;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@SuppressLint("InflateParams")
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null){
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.item_checbox, null);
holder.mCheckBox = (CheckBox) convertView.findViewById(R.id.cb_item);
holder.mTextView = (TextView) convertView.findViewById(R.id.tv_item);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
//多选状态判断
holder.mCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
mCBFlag.put(position, true);
}else{
mCBFlag.put(position, false);
}
}
});
holder.mCheckBox.setChecked(mCBFlag.get(position));
holder.mTextView.setText(mListArrays[position]);

return convertView;
}

public final class ViewHolder{
public CheckBox mCheckBox;
public TextView mTextView;
}
}
...全文
269 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
楼上各种解决方法,遍历list,没得到一个Item给TextView射一个背景,这样最方便..
qq452642969 2015-02-04
  • 打赏
  • 举报
回复
在adapter的构造方法里面再传入一个颜色的数组或者list,然后在getview的时候再根据传入的数组或者list去获取颜色,然后设置View的背景色
Smile丶Ho 2015-02-03
  • 打赏
  • 举报
回复
引用 10 楼 u010514380 的回复:
[quote=引用 8 楼 ca13660049466 的回复:] [quote=引用 5 楼 u010514380 的回复:] 首先,不同的item设置不同的颜色,你只要在adapter中把可以设置颜色的那个控件找到,然后convertView.findViewById(),,给这个控件setBackground就好了,可能说得不清楚,假设你的item的父控件是一个LinearLayout,你设置它的id为layout,在adapter中,holder.layout = (LinearLayout) convertView.findViewById(R.id.layout);(当然viewHolder要添加layout),然后holder.layout.setBackground就好了,不同的position设置不同的颜色 其次,关于做checkBox的问题,我觉得只要在adapter中添加一个变量,将你check了的item的position保存起来,建议用HashSet,很方便,然后在adapter中写一个public方法,获取这个变量,在你的Activity中不就可以知道点击了哪些item了吗? 相信已经比较详细了,表述有问题,可以继续提问
非常感谢你百忙之中帮我解答问题!根据你的方法我已经解决了!不过关于这个HashSet怎么使用我不会,如果可以的话想请你写个实例给我参考!谢谢![/quote] private static HashSet<Integer> list = new HashSet<Integer>(); public static void main(String[] args){ list.add(1); list.add(2); list.add(3); for (Integer num : list) { System.out.println(num); } } 清楚了吧,就跟list<Integer>差不多的意思[/quote] 谢谢!
super小靖 2015-02-02
  • 打赏
  • 举报
回复
引用 8 楼 ca13660049466 的回复:
[quote=引用 5 楼 u010514380 的回复:] 首先,不同的item设置不同的颜色,你只要在adapter中把可以设置颜色的那个控件找到,然后convertView.findViewById(),,给这个控件setBackground就好了,可能说得不清楚,假设你的item的父控件是一个LinearLayout,你设置它的id为layout,在adapter中,holder.layout = (LinearLayout) convertView.findViewById(R.id.layout);(当然viewHolder要添加layout),然后holder.layout.setBackground就好了,不同的position设置不同的颜色 其次,关于做checkBox的问题,我觉得只要在adapter中添加一个变量,将你check了的item的position保存起来,建议用HashSet,很方便,然后在adapter中写一个public方法,获取这个变量,在你的Activity中不就可以知道点击了哪些item了吗? 相信已经比较详细了,表述有问题,可以继续提问
非常感谢你百忙之中帮我解答问题!根据你的方法我已经解决了!不过关于这个HashSet怎么使用我不会,如果可以的话想请你写个实例给我参考!谢谢![/quote] private static HashSet<Integer> list = new HashSet<Integer>(); public static void main(String[] args){ list.add(1); list.add(2); list.add(3); for (Integer num : list) { System.out.println(num); } } 清楚了吧,就跟list<Integer>差不多的意思
Smile丶Ho 2015-02-02
  • 打赏
  • 举报
回复
引用 7 楼 u012137924 的回复:
给每个Item设置Tag,然后根据Tag来添加背景。 convertView.settag(position); int tag = converntView.gettag(); switch(tag){ ...... } 基本就这样了,很简单的。
非常感谢!
Smile丶Ho 2015-02-02
  • 打赏
  • 举报
回复
引用 5 楼 u010514380 的回复:
首先,不同的item设置不同的颜色,你只要在adapter中把可以设置颜色的那个控件找到,然后convertView.findViewById(),,给这个控件setBackground就好了,可能说得不清楚,假设你的item的父控件是一个LinearLayout,你设置它的id为layout,在adapter中,holder.layout = (LinearLayout) convertView.findViewById(R.id.layout);(当然viewHolder要添加layout),然后holder.layout.setBackground就好了,不同的position设置不同的颜色 其次,关于做checkBox的问题,我觉得只要在adapter中添加一个变量,将你check了的item的position保存起来,建议用HashSet,很方便,然后在adapter中写一个public方法,获取这个变量,在你的Activity中不就可以知道点击了哪些item了吗? 相信已经比较详细了,表述有问题,可以继续提问
非常感谢你百忙之中帮我解答问题!根据你的方法我已经解决了!不过关于这个HashSet怎么使用我不会,如果可以的话想请你写个实例给我参考!谢谢!
山鹰1985 2015-02-02
  • 打赏
  • 举报
回复
给每个Item设置Tag,然后根据Tag来添加背景。 convertView.settag(position); int tag = converntView.gettag(); switch(tag){ ...... } 基本就这样了,很简单的。
windfury_plus 2015-02-01
  • 打赏
  • 举报
回复
引用 2 楼 ca13660049466 的回复:
那个,关于分数这个- -!我 积分太少了,想赚点而已!是我贪了- -!不过你所说的设置布局文件外层的颜色的话做不到每一个item对应颜色吧?例如内容为蓝色的那个标签的背景色我是定为蓝色,,要怎么在这显示出来?
楼上说的很详细了。 每个item你可以认为是一个布局文件。 既然你分别设置了他们的textview 同理,可以分别设置他们的background,因为都是控制一个布局文件中不同的view的效果(一个是显示文字,另一个是显示背景颜色)
super小靖 2015-02-01
  • 打赏
  • 举报
回复
首先,不同的item设置不同的颜色,你只要在adapter中把可以设置颜色的那个控件找到,然后convertView.findViewById(),,给这个控件setBackground就好了,可能说得不清楚,假设你的item的父控件是一个LinearLayout,你设置它的id为layout,在adapter中,holder.layout = (LinearLayout) convertView.findViewById(R.id.layout);(当然viewHolder要添加layout),然后holder.layout.setBackground就好了,不同的position设置不同的颜色 其次,关于做checkBox的问题,我觉得只要在adapter中添加一个变量,将你check了的item的position保存起来,建议用HashSet,很方便,然后在adapter中写一个public方法,获取这个变量,在你的Activity中不就可以知道点击了哪些item了吗? 相信已经比较详细了,表述有问题,可以继续提问
Smile丶Ho 2015-02-01
  • 打赏
  • 举报
回复
引用 3 楼 ca13660049466 的回复:
现在编辑不了帖子了!无奈了,我想要这个效果: 主界面我已经实现这效果了,但是那个多选界面不知道该怎么去实现!求帮助!
那些字是我自己输入的!这是个我做的便签!便签从数据库获取,数据库中包括了这条便签的背景色,然后在主界面的listview上显示了对应的背景色!多选界面不知道怎么做!
Smile丶Ho 2015-02-01
  • 打赏
  • 举报
回复
现在编辑不了帖子了!无奈了,我想要这个效果:

主界面我已经实现这效果了,但是那个多选界面不知道该怎么去实现!求帮助!
Smile丶Ho 2015-02-01
  • 打赏
  • 举报
回复
引用 1 楼 inquisitive_plus 的回复:
和修改名字应该是类似的 设置R.layout.item_checbox这个布局文件的外层layout的颜色 PS: 代码让人下载的话,干嘛要设分数?这样帮你还得扣分。。虽然1分不多
那个,关于分数这个- -!我 积分太少了,想赚点而已!是我贪了- -!不过你所说的设置布局文件外层的颜色的话做不到每一个item对应颜色吧?例如内容为蓝色的那个标签的背景色我是定为蓝色,,要怎么在这显示出来?
windfury_plus 2015-02-01
  • 打赏
  • 举报
回复
和修改名字应该是类似的 设置R.layout.item_checbox这个布局文件的外层layout的颜色 PS: 代码让人下载的话,干嘛要设分数?这样帮你还得扣分。。虽然1分不多

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧