2016-05-21 15 views
-1

Ich baue eine SMS-App und um eine Konversation Fluss in einer Listview anzuzeigen. Meine Daten werden in einer ArrayList der Nachricht registriert, einer Klasse, die ich erstellt habe, um auf ein SMS-Nachrichtenelement für meine App zu verweisen.Erstellen Sie einen BaseAdapter von Arraylist des benutzerdefinierten Objekts

Für Testzwecke, habe ich diesen Adapter gemacht:

package fr.nf.smsplus; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

import java.util.List; 

/** 
* Created by Nicolas on 20/05/2016. 
*/ 
public class conversationAdapter extends BaseAdapter { 

    Context context; 
    Message[] conv; 
    private static LayoutInflater inflater = null; 

    public conversationAdapter(Context context, Message[] conv) { 
     // TODO Auto-generated constructor stub 
     this.context = context; 
     this.conv = conv; 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return conv.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return conv[position]; 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     View vi = convertView; 
     if (vi == null) 
      vi = inflater.inflate(R.layout.item_bubble_me, null); 
     TextView text = (TextView) vi.findViewById(R.id.txtMsg); 
     text.setText(conv[position].content); 
     return vi; 
    } 

} 

Hier ist die Ausgabe von dem, was ich gemacht habe:

enter image description here

Mein Adapter funktioniert. Aber ich muss jetzt auswählen, welche Blase im getView meines Adapters verwendet werden soll, also kann ich den ArrayAdapter nicht verwenden. Ich werde meinen eigenen Adapter machen müssen.

Also Ich muss alles in eine ArrayList der Nachricht anstelle von Array konvertieren, um eine dynamische Zuordnung der Ressource für das Array zu machen.

Wie kann ich meinen Adapter ändern, um ArrayList of Message korrekt zu verwenden, um es in einem Listview anzuwenden?

Antwort

1
package fr.nf.smsplus; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

import java.util.List; 

/** 
* Created by Nicolas on 20/05/2016. 
*/ 
public class conversationAdapter extends BaseAdapter { 

    Context context; 
    ArrayList<Message> conv; 
    private static LayoutInflater inflater = null; 

    public conversationAdapter(Context context, ArrayList<Message> conv) { 
     // TODO Auto-generated constructor stub 
     this.context = context; 
     this.conv = conv; 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

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

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

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     Message mMessage=conv.get(position); 
     View vi = convertView; 
     if (vi == null) 
      vi = inflater.inflate(R.layout.item_bubble_me, null); 
     TextView text = (TextView) vi.findViewById(R.id.txtMsg); 
     text.setText(mMessage.content); 
     return vi; 
    } 
} 

Hinweis: Versuchen Sie ViewHolder mit, dass die Leistung der App zu erhöhen.

+0

Werde das sehen, danke –