2017-04-05 2 views
0

Ich habe eine Liste eines POJO in einem Android-App und ich zur Zeit eines der Felder in einer Listenansicht/listitem wie so bin Anzeige:Anzeige mehr Felder aus POJO Objekt in Listview

List<NotificationItem> notifItems; 
// snip, populate 

ArrayAdapter adapter = new ArrayAdapter<>(this, R.layout.notification_item, notifItems); 

ListView listView = (ListView) findViewById(R.id.notification_listview); 
listView.setAdapter(adapter); 

Und es ist mein zu verstehen, dass der Adapter die listivew oder toString des POJO verwendet, die

public String toString() { 
    SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd hh:mm"); 
    return _notificationTitle + " | " + dateFormatter.format(_notificationReceivedDate); 
} 

R.id.notificationitem ist

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/label" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:padding="10dip" 
android:textSize="16sp" 
android:textStyle="bold"></TextView> 

So weit so gut, aber was ich tun möchte, ist Elemente in die Layout-Datei notificationitem und dann aktualisieren Sie den Java-Code, um die neuen Felder zu füllen.

Wie wird das gemacht? Ich verstehe nicht wirklich, wie der Adapter den ToString-Wert in das eine Feld im Benachrichtigungselement eingibt/setzt.

+2

Sie müssen einen benutzerdefinierten Adapter erstellen. –

+0

benötigen Sie einige benutzerdefinierte Adapter wie: 'Klasse Adapter erweitert' [MatchableArrayAdapter] (https://gist.github.com/pskink/2dd4d17a93caf02ff696533e82f952b0)' {... 'und überschreiben Sie seine' onBind() 'Methode, extra Bonus : Überschreibe 'matches()' -Methode, wenn du eine einfache Objektfilterung möchtest – pskink

Antwort

1
public class NotificationItem { 
    //your fields here 
} 
//----------------------- 
public class NotifAdapter extends BaseAdapter { 

    Context context; 
    List<NotificationItem> data; 

    public NotifAdapter(Context context, List<NotificationItem> data) { 
     this.context = context; 
     this.data = data; 
    } 

    @Override 
    public int getCount() { 
     return data.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return data.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = layoutInflater.inflate(R.layout.your_row_layout,parent, null); 
     TextView tx = convertView.findViewById(R.id.your_widget_inside_row_layout); 
     tx.setText(data.yourDataPropery); 
     return convertView; 
    } 
} 
// In your activity 
NotifAdapter adapter = new NotifAdapter(this, ArrayList<NotificationItem>); 
listView.setAdapter(adapter); 
Verwandte Themen