Я использую список массивов, listView и собственный простой адаптер для создания своего списка в Android. В следующем коде я использую addItem () для добавления Item. Мне нужно добавить элемент onActivityResult, используя некоторые дополнения, которые я получаю в намерении. Все это отлично работает , но проблема возникает, когда я пытаюсь установить цвет фона, основываясь на тех дополнениях, которые я получаю. Я думаю, что это связано с тем, что адаптер не обновляется и т. Д. Мой код прояснит то, что я пытаюсь сказать.
SimpleAdapter adapter;
List<HashMap<String, String>> painItems = new ArrayList<HashMap<String, String>>();
ListView listthings;
int[] to;
String[] from;
**OnCreate()**{
from = new String[] { "row_1", "row_2" };
to = new int[] { R.id.row1, R.id.row2 };
adapter = new Adapter(this, painItems, R.layout.mylistlayout, from, to);
listthings.setAdapter(adapter);
}
Код пользовательского адаптера :
public class Adapter extends SimpleAdapter {
HashMap<String, String> map = new HashMap<String, String>();
public Adapter(Context context,
List<? extends Map<String, 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 row = convertView;
row = super.getView(position, convertView, parent);
if (row == null) {
LayoutInflater mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = mInflater.inflate(R.layout.mylistlayout, parent, false);
}
if (Integer.valueOf(painItems.get(position).get("row_3")) != null) {
if (Integer.valueOf(painItems.get(position).get("row_3")) == 2) {
row.setBackgroundColor(0xFF0000FF);//**BACKGROUND COLOR SET HERE**
//Toast.makeText(getApplicationContext(), "this one", Toast.LENGTH_SHORT).show();
}
}
return row;
}
}
Как я получаю необходимые дополнения и добавляю предмет:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == 1) {
row1 = data.getStringExtra("com.painLogger.row1");
row2 = data.getStringExtra("com.painLogger.row2");
painLevelString = data.getStringExtra("com.painLogger.painLevel");
painLocation = data.getStringExtra("painLocation");
timeOfPainString = data.getStringExtra("com.painLogger.painTime");
textTreatmentString = data
.getStringExtra("com.painLogger.treatment");
addItem();
}
}
// to add the item, put it in the map, and add the map into the list
private void addItem() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("row_1", row1);
map.put("row_2", row2);
map.put("row_3", painLevelString);
map.put("row_4", painLocation);
map.put("row_5", timeOfPainString);
map.put("row_6", textTreatmentString);
painItems.add(map);
adapter.notifyDataSetChanged();
}
Опять же, когда я добавляю элемент в свой список, я хочу увидеть, что такое «painlevelString». Если это определенное значение, я хотел бы установить цвет фона. Все добавления и т. Д. Работают, но они заканчивают тем, что устанавливают синий цвет фона для всего, что я добавляю, независимо от данных, которые я передаю через намерение для этого определенного элемента.
Хотя я полагаю, что добавил весь соответствующий код, мою полную активность можно найти здесь: http://pastebin.com/4BWQYpnj.
Заранее благодарим Вас за то, что нашли время решить мою проблему