ArrayList содержит строковые значения в следующем порядке: «ЗЕЛЕНЫЙ», «ЗЕЛЕНЫЙ», «КРАСНЫЙ», «КРАСНЫЙ», «ЗЕЛЕНЫЙ», «ЗЕЛЕНЫЙ». Значения корректно отображаются в ListView ListActivity.Android - Strange Ошибка ListView
Я установил его так, чтобы при нажатии любого элемента в элементе ListView все элементы со строковым значением «RED» удаляются из списка. Однако проблема заключается в том, что ListView, несмотря на то, что контейнер значений теперь содержит только значения «ЗЕЛЕНЫЕ», визуально показывает удаление двух значений «ЗЕЛЕНЫЙ», поэтому теперь ListView показывает «ЗЕЛЕНЫЙ», «ЗЕЛЕНЫЙ», «КРАСНЫЙ», RED ", даже если адаптер содержит значения" ЗЕЛЕНЫЙ "," ЗЕЛЕНЫЙ "," ЗЕЛЕНЫЙ "," ЗЕЛЕНЫЙ ".
Если адаптер содержит значения R, R, G, G, R, R, G, G и элемент щелкнул, теперь он содержит R, R, G, G.
Ошибка в коде? Отладчик, отображающий все значения «ЗЕЛЕНЫЕ» строки, действительно озадачивает, потому что ListView показывает что-то другое.
public class MyActivity extends ListActivity implements AdapterView.OnItemClickListener {
ArrayList<String> listValues;
bugtestadapter adapter;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listValues = new ArrayList<String>();
listValues.add("GREEN");
listValues.add("GREEN");
listValues.add("RED");
listValues.add("RED");
listValues.add("GREEN");
listValues.add("GREEN");
adapter = new bugtestadapter(this, R.layout.adapter, listValues);
setListAdapter(adapter);
getListView().setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
deleteRedValues();
adapter.notifyDataSetChanged();
}
public void deleteRedValues() {
for (Iterator<String> iterator = listValues.iterator(); iterator.hasNext();) {
String c = iterator.next();
if (c.equals("RED")) {
iterator.remove();
}
}
}
}
bugtestadapter.java
public class bugtestadapter extends ArrayAdapter<String> {
Context mContext;
ArrayList<String> adapterList;
LayoutInflater inflater;
public bugtestadapter(Context context, int resource, ArrayList<String> objects) {
super(context, resource, objects);
mContext = context;
adapterList = (ArrayList)objects;
inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.adapter, null);
TextView tv = (TextView) convertView.findViewById(R.id.adapterItem);
tv.setText(adapterList.get(position));
if (tv.getText().equals("GREEN"))
tv.setTextColor(Color.GREEN);
else if (tv.getText().equals("RED"))
tv.setTextColor(Color.RED);
}
return convertView;
}
}
четкий перечень адаптер –
Очистка адаптер список очищает все значения. Я только пытаюсь удалить значения «RED». Проблема здесь в том, что контейнер содержит только значения «ЗЕЛЕНЫЕ», но ListView показывает «RED» значения, которые были удалены. – ShrimpCrackers
... и если convertView не равен нулю? – Simon