Обработка нажатий на 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 шт):

Автор решения: woesss

В класс 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;
}
}});

→ Ссылка