Обработка нажатий на listView при отсутстивии некоторых элементов
Есть список типа listView
Data one = new Data("text", "text", "text");
Data two = new Data("text2", "text2", "text2");
Data three = new Data("text3", "text3", "text3");
Всё как положено - объявил его
ArrayList<Data> list= new ArrayList<>();
сказал ему что нужнj добавить в сам список. но только те элементы , которые нужно
if(number>0){
list.add(one)
}
list.add(two)
list.add(three)
После этого добавил сам обработчик действий:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
switch (position) {
case 0:
this.startActivity(new Intent(this, NewAc.class));
break;
case 1:
this.startActivity(new Intent(this, NewAc1.class));
break;
case 2:
this.startActivity(new Intent(this, NewAc1.class));
break;
}
}});
Но так как переменная number равняеться 0, то этого списка нет, но если я нажму на 2 список(two) будет позиция 0, то есть такая же как и в one, но так как one не добавлен при проверке two взяла позицию one и из-за этого переадресация two идёт на NewAc, а не на NewAc1 Как можно сохранить позицию элемента, которого нету в списке?
Ответы (1 шт):
В класс Data добавляем поле, в котором будет храниться его номер:
public class Data {
private int id;
...
Data(int id, /*другие параметры*/) {
this.id = id;
...
}
public int getId() {
return id;
}
}
Задаём номера при создании объектов:
Data one = new Data(0, "text", "text", "text");
Data two = new Data(1, "text2", "text2", "text2");
Data three = new Data(2, "text3", "text3", "text3");
В обработчике выбираем действие по номеру, записанному в объекте:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
Data data = list.get(position);
switch (data.getId()) {
case 0:
this.startActivity(new Intent(this, NewAc.class));
break;
case 1:
this.startActivity(new Intent(this, NewAc1.class));
break;
case 2:
this.startActivity(new Intent(this, NewAc1.class));
break;
}
}});