我有两个字段的JSON - 名称和性别。 如果性别为男性,我想将每个名称的颜色设为蓝色;如果是女性,我想将其粉红色。
这是我的代码
ArrayList feedList1 = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < data.length(); i++) {
HashMap<String, Object> hm;
hm = new HashMap<String, Object>();
hm.put("id", data.getJSONObject(i).getString("id").toString());
hm.put("gender", data.getJSONObject(i).getString("gender").toString());
hm.put("name", data.getJSONObject(i).getString("name").toString());
feedList1.add(hm);
SimpleAdapter adapter = new SimpleAdapter(feedList.getContext(), feedList1, R.layout.list,
new String[] {"id","name"}, new int[] { R.id.personId, R.id.personName }){
@Override
public void setViewText(TextView v, String text) {
super.setViewText(v, text);
if (v.getId() == R.id.personName) {
if (/* how to get gender of this person*/)
v.setTextColor(R.color.female);
else
v.setTextColor(R.color.male);
}
}
};
feedList.setAdapter(adapter);
feedList.setChoiceMode(feedList.CHOICE_MODE_SINGLE);
}
请告诉我如何在IF语句中添加性别。
答案 0 :(得分:1)
如果不创建自己的自定义适配器,则无法执行此操作,因此可以覆盖getView。检查以下代码并使用CustomAdapter而不是SimpleAdapter
class CustomAdapter extends SimpleAdapter {
public CustomAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
Map<String, Object> item = (Map<String, Object>) getItem(position);
if ("male".equals(item.get("gender").toString())) {
view.setBackgroundColor(R.color.male);
} else {
view.setBackgroundColor(R.color.female);
}
return view;
}
}
答案 1 :(得分:0)
我认为你必须在使用之前获取String值。所以你必须通过以下方式来实现:
String gender = hm.get("gender");
if (gender.equals("male"))
dosomething;
else
doAnotherThing;
我认为你也必须让hm成为最终! 我希望它对你有所帮助!!
答案 2 :(得分:-1)
您应该覆盖getView方法而不是setViewText。但是如果你非常希望使用setViewText,你可以将对象的名称设置为像#34; thomas&amp; man&#34;这样你可以用字符串将字符串分成字符串数组&#34;&amp; ;&#34;数组的第二项将是你的性别。但更好的使用是覆盖getView方法,这是正确的方法。