Chat ListView Problem

  • Antworten:3
  • Bentwortet
Michael Stoll
  • Forum-Beiträge: 9

21.04.2014, 14:53:42 via Website

Hey zusammen, leider kann ich mein Problem nicht so kurz beschreibe das es in die Überschrift passt. Das Problem ist: Ich habe einen ListView der einen Chat ausgeben soll, wenn der Username, dem eigenen Username entspricht soll der Username in grün ausgegeben werden, sonst in schwarz. Leider funktioniert das nur bedingt, siehe Bild (Lapineu ist mein laptop von dem die Nachricht gesendet wurde, handymi ist mein handy):

image

Hier noch der Quellcode zu meine, CustomAdapter, ich denke dort liegt das Problem:

`package com.example.wgapp;

import java.util.ArrayList; import java.util.HashMap; import java.util.List;

import com.example.wgapp.data.Chat;

import android.R.color; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView;

public class LazyAdapter extends BaseAdapter{

private List<Chat> _data;
Context _c;
String user2;

LazyAdapter (Context c, List<Chat> data, String username){
    _data = data;
    _c = c;
    user2 = username;
}

public int getCount() {
    // TODO Auto-generated method stub
    return _data.size();
}

public Object getItem(int position) {
    // TODO Auto-generated method stub
    return _data.get(position);
}

public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
     View v = convertView;
     if (v == null)
     {
        LayoutInflater vi = (LayoutInflater)_c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.list_row, null);
     }

       TextView fromView = (TextView)v.findViewById(R.id.name);       
       TextView timeView = (TextView)v.findViewById(R.id.date);
       TextView descView = (TextView)v.findViewById(R.id.message);

      if(_data.get(position).getUserName().equals(user2)){
          fromView.setText(_data.get(position).getUserName());
          fromView.setTextColor(Color.parseColor("#00FF00"));
          descView.setText(_data.get(position).getDate());
          timeView.setText(_data.get(position).getMessage()); 
      } else{
       fromView.setText(_data.get(position).getUserName());
       descView.setText(_data.get(position).getDate());
       timeView.setText(_data.get(position).getMessage());  
      }


    return v;

}`

Edit: Sry irgendwie hat das mit dem Code nicht richtig funktioniert oder?

danke für eure Hilfe, weiß echt nicht mehr weiter...

Grüße Michi

— geändert am 21.04.2014, 14:54:56

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

21.04.2014, 16:02:09 via Website

Am einfachsten ist es, wen du in den Debugmodus gehst und dann diese stelle genau anschaust:

 if(_data.get(position).getUserName().equals(user2)){
      fromView.setText(_data.get(position).getUserName());
      fromView.setTextColor(Color.parseColor("#00FF00"));
      descView.setText(_data.get(position).getDate());
      timeView.setText(_data.get(position).getMessage()); 
  } else{
   fromView.setText(_data.get(position).getUserName());
   descView.setText(_data.get(position).getDate());
   timeView.setText(_data.get(position).getMessage());  
  }

Ich glaube das mit dem GetName aus deine Chat Klasse funktioniert nicht immer, sodass der Name nicht überprüft werden kann und dann der else-Zweig ausgeführt wrid.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

21.04.2014, 16:57:32 via Website

Die Ursache ist, das du im else Zweig keine Farbe setzt; wird der View (via convertView) wiederverwendet, dann ist die Farbe ggf bereits grün und wird hier nicht wieder auf schwarz zurück gesetzt.

Antworten
Michael Stoll
  • Forum-Beiträge: 9

21.04.2014, 20:34:48 via Website

Danke ihr zwei! and dav deine antwort hat funktioniert ;)

Grüße Michi

Antworten