2014-12-07 4 views
1

Я хочу обновить определенный элемент в arraylist.Обновить конкретный товар в arraylist

Это Conversation класс:

class Conversation 
{ 
    String sender,to,name,bio,picture; 
    Integer id,time,unread; 
    public Conversation() { 

    } 
    public Conversation (int id,String sender,String to,String name,String bio,String picture,int time,int unread) { 
     this.sender=sender; 
     this.to=to; 
     this.id=id; 
     this.name=name; 
     this.bio=bio; 
     this.picture=picture; 
     this.time=time; 
     this.unread=unread; 
    } 

    public void setSender(String sender) { 
     this.sender=sender; 
    } 
    public void setTo(String to) { 
     this.to=to; 
    } 
    public void setId(int id) { 
     this.id=id; 
    } 
    public void setTime(int time) { 
     this.time=time; 
    } 
    public void setUnread(int unread) { 
     this.unread=unread; 
    } 
    public void setName(String name) { 
     this.name=name; 
    } 
    public void setBio(String bio) { 
     this.bio=bio; 
    } 
    public void setPicture(String picture) { 
     this.picture=picture; 
    } 

    public String getSender() { 
     return this.sender; 
    } 
    public String getTo() { 
     return this.to; 
    } 
    public int getId() { 
     return this.id; 
    } 
    public int getTime() { 
     return this.time; 
    } 
    public int getUnread() { 
     return this.unread; 
    } 
    public String getName() { 
     return this.name; 
    } 
    public String getBio() { 
     return this.bio; 
    } 
    public String getPicture() { 
     return this.picture; 
    } 
} 

Я добавление элементов из базы данных в этот список со следующими линиями:

public List<Conversation> getAllConversations() { 
    List<Conversation> conversationsList=new ArrayList<Conversation>(); 
    String selectQuery = "SELECT * FROM " + TABLE_CONVERSATIONS+" order by id desc"; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 
     if (cursor.moveToFirst()) { 
      do { 
       Conversation Conversation = new Conversation(); 
       Conversation.setId(Integer.parseInt(cursor.getString(0))); 
       Conversation.setSender(cursor.getString(1)); 
       Conversation.setTo(cursor.getString(2)); 
       Conversation.setName(cursor.getString(3)); 
       Conversation.setBio(cursor.getString(4)); 
       Conversation.setPicture(cursor.getString(5)); 
       Conversation.setTime(Integer.parseInt(cursor.getString(6))); 
       Conversation.setUnread(Integer.parseInt(cursor.getString(7)));   
       conversationsList.add(Conversation); 
      } while (cursor.moveToNext()); 
     } 
     return conversationsList; 
} 

Я хочу использовать setUnread метод для конкретного элемента, но как? Я знаю, что я могу изменить, как это:

conversationsList.get(location).setUnread(1); 

Но я не знаю, что location.I нужно получить деталь с другим parameter.e.g я могу получить деталь sender значения?

мне нужно что-то вроде этого:

conversationsList.getByUsername("username").setUnread(1); 

ответ

0

ArrayList может быть доступна только с помощью индекса нулевой основы. Если вы хотите использовать элементы с помощью другого ключа (id или username), вам необходимо использовать Map или SparseArray (если вы используете цифровой ключ).

Поскольку вы хотели для поиска элементов по «имя пользователя», я буду использовать карту в следующем примере:

public Map<String, Conversation> getAllConversations() { 
    final Map<String, Conversation> conversations = new HashMap<>(); 

    Cursor cursor = ...; 
    while (cursor.moveToNext()) { 
    Conversation conversation = new Conversation(); 
    ... 
    conversations.put(conversation.getSender(), conversation); 
    } 
    cursor.close(); // don't forget to close your cursors! 

    return conversations; 
} 

Тогда вы можете посмотреть, как это разговоры:

conversations.get("John Doe").setUnread(1); 

Примечание: Вы можете использовать conversation.setTime(cursor.getInt(6)); вместо conversation.setTime(Integer.parseInt(cursor.getString(6)));. База данных SQLite не заботится о том, хранится ли строка или целое число.

+0

Я использовал этот список в адаптере. Как продолжать использовать? – Okan

+0

@Okan вы можете конвертировать карту в список через функцию Map.values ​​() – Dmitry

+0

Мне нужен упорядоченный список hashmap не гарантирует позиции позиций. И мне нужно добавить новые элементы в начало этой хэш-карты. Как я могу это сделать? – Okan