2015-03-10 8 views
1

Я разрабатываю приложение, которое использует ArrayList для заполнения ListView. Я использую пользовательский класс для своего ListView. Я хочу добавить/удалить из ArrayList для моего Listview. Моя цель - это элементы элемента списка элементов управления, если он существует в ArrayList удалить или если его нет в ArrayList, добавьте элемент списка.Добавить/удалить значение из ArrayList для значений uniqe

Чтобы объяснить свою ситуацию, я вставил свой код ниже;

Это мой пользовательский класс;

public class NDListItem { 
    String textdata; 
    public NDListItem(String textdata) { 
     this.textdata = textdata; 
    } 
} 

Это мой метод использования моего класса. Параметр Name исходит из другого действия. Это происходит должным образом. Я использую цикл для этой проблемы и не могу позволить себе получить то, что хочу. Я прочитал документацию и нашел другое решение. Использование метода equals и hash-code для моего класса может выполнять мою работу, но я не знаю, как это сделать.

EDIT: Добавить пояснения и myItems пояснения во втором кодовом блоке.

public void addLayersection(String name) { 

//MyList already defined on the scope.. 
//MyList looks like this 
// ArrayList<NDListItem> myItems = new ArrayList<>(); 

    NDListItem listItem = new NDListItem(name); 
    if (myItems.size() == 0) { 
     myItems.add(listItem); 
    } else { 
    if(myItems.contains(listItem)) 
     { 
      myItems.add(listItem); 
     } 
     else 
     { 
      myItems.remove(listItem); 

     } 

    } 

    myAdapter.notifyDataSetChanged(); 
} 

EDIT2

Я обновил свой класс для равных метода. Он работает чудесно, но работает только первый элемент, который я добавил в ArrayList. Я хочу эту работу для каждого пунктов

public class NDListItem { 
    String textdata; 

    public NDListItem(String textdata) { 
     this.textdata = textdata; 
    } 

    public boolean equals(Object o) { 
     if (o == null) return false; 
     //if(!(o instanceof) NDListItem) return false; 
     if (!(o instanceof NDListItem)) return false; 

     NDListItem other = (NDListItem) o; 
     if (!this.textdata.equals(other.textdata)) 

      return false; 
     else 


     return true; 
    } 
} 
+2

http://tutorials.jenkov.com/java-collections/hashcode-equals.html – iced

+0

Я не мог позволить себе добавить это использование в свой проект. – salih

+0

Вы не можете добавить несколько методов в свой собственный класс? – iced

ответ

1

OK, Из предоставленных Вами сведений,

Как нет .equals() переопределяется метод, доступного в пользовательском классе NDListItem

Вашего списке будет сравнивать объект основанные на ссылках, поэтому просто переопределяем метод .equals() в вашем обычном NDListItem класс

Нравится, (псевдо-код для разговора)

@Override 
public boolean equals(Object obj) {  
    NDListItem ndListItemObject = (NDListItem) obj;   
    return this.textdata.equalIgnoreCase(ndListItemObject.textdata); 
} 

Теперь, .contains() метод будет работать над пользовательским списком объектов по вашему желанию.

Потому что ваше сравнение объектов сделано по textdata.

+0

Его над вами уже решена моя проблема. Спасибо. – salih

+0

@salih - Счастливое кодирование :) – user370305