导航
  • 主页
  • 招聘
  • 音视频
  • Camera
  • UI
  • 协议
  • SDK
  • NDK
  • Flutter
  • ADB
  • Android Studio
  • 模拟器
  • 问答

怎样把ListView每个条目显示不同的颜色?

fslkd5h 2014-05-12 08:52:11
我用的是SimpleAdapter适配器,
SimpleAdapter simpleAdapter=new SimpleAdapter(context, data, resource, from, to);
我是这样写的:

List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
Map<String,Object> map=new HashMap<String,Object>();
map.put("item1", "item1 content");
map.put("item2", "item2 content");
map.put("item3", "item3 content");
list.add(map);

SimpleAdapter simpleAdapter=new MyAdapter(this, list,R.layout.linearLayout1, new String[]{"item1","item2","item3"}, new int[]{R.id.TextView1,R.id.TextView2,R.id.TextView3});

为什么 resource 属性里,既可以写成我自己写的、包含三个TextView的布局文件,还可以写成Android默认的
布局文件android.R.layout.simple_list_item_1,有什么不同?

为了实现我的目的,我写了个类继承SimpleAdapter、重载getView()方法:
@Override
public View getView(int position, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
View v= getView(position, arg1, arg2);
if (v instanceof TextView) {
if (position%2==0) {
v.setBackgroundColor(Color.BLUE);
} else {
v.setBackgroundColor(Color.RED);
}
}
return v;
}
效果: 三个条目颜色没有改变

我又把 resource 属性改成 android.R.layout.simple_list_item_1 效果:只剩下一个蓝色条目,且没有颜色

有人说:继承BaseAdapter,我不知道怎么写?

咋整?
...全文
227 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫凌峰 2014-05-13
你这样写的话,我估计条目的颜色会变,但三个条目的颜色一样……如果想要三个条目颜色不一样,可能需要重写ListView 不知道我的猜测 对不?
回复
nj_dobetter 2014-05-13
简单!~~~~~~
回复
2在路上 2014-05-13
引用 7 楼 u013805452 的回复:
[quote=引用 6 楼 smallkonrad 的回复:] [quote=引用 4 楼 u013805452 的回复:] 谁能提供一个可以运行的 BaseAdapter 的例子,非常感谢!

class JiluAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			return mList.size();
		}

		@Override
		public Object getItem(int position) {
			return mList.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			JiluBean bean = mList.get(position);
			convertView = LayoutInflater.from(INSTANCE).inflate(
					R.layout.jilu_list_item, null);

			TextView itemText2 = (TextView) convertView
					.findViewById(R.id.itemText2);
			
			itemText2.setText(bean.getClient());
			
			if (result.equals("不合格")) {
				tg_result.setRoundColor(0xffF62A15);
				tg_result.setNumSize(UnitUtil.sp2px(INSTANCE, 17));
			}
			if (position % 2 == 1) {
				convertView.setBackgroundColor(0xffE9F8FA);
			}
			return convertView;
		}
	}
[/quote] mList 集合在哪进行初始化的,有人是把 List 集合写在 JiluAdapter 的构造方法里,当做构造参数, new 的时候初始化,你写在哪?[/quote] 从外面传进来的时候初始化就可以了 BaseAdapter baseAdapter = new BaseAdapter(context,listview); 传到构造函数里面
回复
erytbc 2014-05-12
引用 4 楼 u013805452 的回复:
谁能提供一个可以运行的 BaseAdapter 的例子,非常感谢!

class JiluAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			return mList.size();
		}

		@Override
		public Object getItem(int position) {
			return mList.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			JiluBean bean = mList.get(position);
			convertView = LayoutInflater.from(INSTANCE).inflate(
					R.layout.jilu_list_item, null);

			TextView itemText2 = (TextView) convertView
					.findViewById(R.id.itemText2);
			
			itemText2.setText(bean.getClient());
			
			if (result.equals("不合格")) {
				tg_result.setRoundColor(0xffF62A15);
				tg_result.setNumSize(UnitUtil.sp2px(INSTANCE, 17));
			}
			if (position % 2 == 1) {
				convertView.setBackgroundColor(0xffE9F8FA);
			}
			return convertView;
		}
	}
回复
哎,真难 2014-05-12
能不能自定义一个adapter
回复
fslkd5h 2014-05-12
谁能提供一个可以运行的 BaseAdapter 的例子,非常感谢!
回复
triplesky001 2014-05-12
楼上的正解,加上viewholder就更理想了
回复
Jerry_Li-CN 2014-05-12
继承BaseAdapter很简单,重载方法就行了,重载getView()的方法差不多是一样的,就像你上边那样写
回复
你的类不用继承 SimpleAdapter,去继承BaseAdapter。 然后你的adapter变量也是用MyAdapter类型。
回复
fslkd5h 2014-05-12
引用 6 楼 smallkonrad 的回复:
[quote=引用 4 楼 u013805452 的回复:] 谁能提供一个可以运行的 BaseAdapter 的例子,非常感谢!

class JiluAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			return mList.size();
		}

		@Override
		public Object getItem(int position) {
			return mList.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			JiluBean bean = mList.get(position);
			convertView = LayoutInflater.from(INSTANCE).inflate(
					R.layout.jilu_list_item, null);

			TextView itemText2 = (TextView) convertView
					.findViewById(R.id.itemText2);
			
			itemText2.setText(bean.getClient());
			
			if (result.equals("不合格")) {
				tg_result.setRoundColor(0xffF62A15);
				tg_result.setNumSize(UnitUtil.sp2px(INSTANCE, 17));
			}
			if (position % 2 == 1) {
				convertView.setBackgroundColor(0xffE9F8FA);
			}
			return convertView;
		}
	}
[/quote] mList 集合在哪进行初始化的,有人是把 List 集合写在 JiluAdapter 的构造方法里,当做构造参数, new 的时候初始化,你写在哪?
回复
发动态
发帖子
Android
创建于2009-10-09

7.8w+

社区成员

移动平台 Android
申请成为版主
社区公告
暂无公告