2016-05-06 9 views
0

Ich habe gerade begonnen, eine Android-App mit Android Studio 2.1 zu codieren und meine App war eine Art Offline-Messaging - das verwendet SQLite-Datenbank (im Grunde besteht aus zwei Tabellen Nachricht und Kontakt).Wie überprüft man die Werte in HashMap <String, String> und setBackgroundResource, wenn record = value?

Ich bin jetzt in meiner letzten Aktivität, wo ich eine Liste von Nachrichtenaustausch aus den Kontakten ausfüllen muss. Ich konnte sie auflisten, aber ohne Ästhetik. Ich möchte verschiedene setBackgroundResource immer dann, wenn der Typ entweder eine LINKE oder RECHTE ist, aber Mühe hatte, es anzuwenden. Unten ist mein Code:

MessageRepo - die SQLite DBhelper:

public ArrayList<HashMap<String, String>> getMessageListById(int fromid, int toid) { 
    SQLiteDatabase db = helper.getWritableDatabase(); 
    String toquery = "SELECT " + MessageModel.messageId + 
      ", " + MessageModel.fromId + 
      ", " + MessageModel.toId + 
      ", " + MessageModel.messageContent + 
      ", 'RIGHT' AS type FROM " + MessageModel.tableMessage + 
      " WHERE " + MessageModel.toId + 
      " = ? AND " + MessageModel.fromId + 
      " = ? "; 
    String fromquery = "SELECT " + MessageModel.messageId + 
      ", " + MessageModel.fromId + 
      ", " + MessageModel.toId + 
      ", " + MessageModel.messageContent + 
      ", 'LEFT' AS type FROM " + MessageModel.tableMessage + 
      " WHERE " + MessageModel.fromId + 
      " = ? AND " + MessageModel.toId + 
      " = ? "; 
    String query = toquery + 
      " UNION " + fromquery + 
      " ORDER BY " + MessageModel.messageId; 

    ArrayList<HashMap<String, String>> messageList = new ArrayList<HashMap<String, String>>(); 

    Cursor cursor = db.rawQuery(query, new String[]{String.valueOf(fromid), String.valueOf(toid), String.valueOf(fromid), String.valueOf(toid)}); 
    if (cursor.moveToFirst()) { 
     do { 
      HashMap<String, String> messages = new HashMap<String, String>(); 
      messages.put("messageId", cursor.getString(0)); 
      messages.put("messageFromId", cursor.getString(1)); 
      messages.put("messageToId", cursor.getString(2)); 
      messages.put("messageContent", cursor.getString(3)); 
      messages.put("type", cursor.getString(4)); 
      messageList.add(messages); 
     } while (cursor.moveToNext()); 
    } 
    cursor.close(); 
    db.close(); 
    return messageList; 
} 

Nachricht Aktivität - dies wird in einem Listview-Anzeige aber nicht funktioniert, wie ich es zu Anzeige der Absicht wurde:

 ArrayList<HashMap<String, String>> messageList = messagehandler.getMessageListById(_fromid, _toid); 
    if (messageList.size() != 0) { 
     ListView listView = getListView(); 
     if(messageList.contains("RIGHT")) { 
      listView.setBackgroundResource(R.drawable.right); 
     } else { 
      listView.setBackgroundResource(R.drawable.left); 
     } 

     ListAdapter adapter = new SimpleAdapter(MessageDetailActivity.this, messageList, R.layout.message, new String[]{"messageFromId", "messageToId", "messageContent"}, new int[]{R.id.FromId, R.id.ToId, R.id.message}); 
     setListAdapter(adapter); 
     } 

Ich habe viele Posts überprüft und ich kann nicht scheinen, dass es für mich funktioniert: The constructor ArrayAdapter>>(Context, int, ArrayList>) is undefined Android Alternate row Colors in ListView

Vielen Dank im Voraus!

Antwort

0

Nach ein bisschen mehr Forschung. Ich fand schließlich die Antwort, indem ich mich dafür entschied, eine Liste und eine Setter/Getter-Klasse zu verwenden:

public class MessagesAdapter extends ArrayAdapter<ContactsAndMessages> { 

public MessagesAdapter(Context context, List<ContactsAndMessages> contacts) { 
    super(context, 0, contacts); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ContactsAndMessages contact = getItem(position); 

    Typeface typeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/helvetica.ttf"); 

    if(convertView == null) { 
     if (contact.type.equalsIgnoreCase("me")) {.... 
Verwandte Themen