Wie fügt man Trennzeichen / Teiler zu einer ListView hinzu?

Ich mache derzeit ein Menü für meine App, mit einem DrawerLayout und einer ArrayAdapter Unterklasse zu erreichen etwas wie Facebook Schublade Menü zu erreichen.

Ich habe derzeit keine Probleme bei der Erstellung der Liste, aber jetzt, wo es gut aussieht, möchte ich Trennzeichen zwischen verschiedenen Arten von Optionen (dh benutzerbezogene und anwendungsbezogene Optionen) und eine Suchleiste oben auf dem Menü hinzufügen.

  • A Switch Java Problem: Fall Ausdrücke müssen konstante Ausdrücke sein
  • Zeichnen Sie den Selektor oben - für ein grundlegendes lineares Layout?
  • Verwenden von onBackPressed () in Android-Fragmenten
  • Benutzerdefinierte Ansicht aufrufen startActivityForResult
  • Android TableLayout Breite
  • Widget falsche Rastergröße
  • Der Code meiner aktuellen ArrayAdaptor-Unterklasse lautet wie folgt:

    public class DrawerMenuAdapter extends ArrayAdapter<String>{ private Context context; private String[] values; private int resId; public DrawerMenuAdapter(Context context, int textViewResourceId, String[] values) { super(context, textViewResourceId, values); this.context = context; this.values = values; this.resId = textViewResourceId; } @Override public View getView(int position, View convertView, ViewGroup parent){ LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(this.resId, parent, false); TextView elementText = (TextView)rowView.findViewById(R.id.element_text); ImageView elementImage = (ImageView)rowView.findViewById(R.id.element_icon); String textValue = values[position]; elementText.setText(textValue); //This switch adds the icons to the related elements switch (position){ case 0: elementImage.setImageResource(R.drawable.search); break; case 1: elementImage.setImageResource(R.drawable.facebook_friends); break; case 2: elementImage.setImageResource(R.drawable.flirts_history); break; case 3: elementImage.setImageResource(R.drawable.premium); break; case 4: elementImage.setImageResource(R.drawable.settings); break; case 5: elementImage.setImageResource(R.drawable.share_app); break; case 6: elementImage.setImageResource(R.drawable.cgu); break; } return rowView; } } 

    Ich nehme an, dass ich die Funktion überschreiben muss, die das ListView durch Aufruf der getView-Funktion füllt, aber ich kann nicht finden, welche Funktion es ist.

  • Ausrichtung der Grundlinie von zwei Textansichten in Android
  • DropBoxManager verwenden Fälle?
  • Seltsame Log-Eintrag im Zusammenhang mit Webcoreglue in Android
  • Path-App wie rundes Menü in Android
  • Android Build - Emulator auf Android Stiefel Logo stecken
  • Android-Soft-Tastatur wird nicht in 2.2 / 2.3 angezeigt, aber in 3.0+
  • 2 Solutions collect form web for “Wie fügt man Trennzeichen / Teiler zu einer ListView hinzu?”

    Wenn Sie einfache Abschnitte in Ihrem ListView wünschen , werfen Sie einen Blick auf dieses Tutorial:

    http://cyrilmottier.com/2011/07/05/listview-tips-tricks-2-sektion-your-listview/

    Oder dieses Tutorial:

    http://bartinger.at/listview-with-sektionenseparatoren/

    Die zweite ist nicht so detailliert, aber wahrscheinlich einfacher zu verstehen / einfacher zu halten.

    Die Grundidee ist, dass Sie Ihren ListAdapter haben verschiedene Arten von Ansichten. Zum Beispiel zwei verschiedene Ansichten, wo eine Art ist die tatsächliche Liste Element Anzeige der Informationen, und die andere Art von Ansicht ist der Abschnitt Teiler.

    Aus dem Tutorium:

    ListViews und speziell Adapters können verschiedene Arten von Views verarbeiten . Wenn Sie einen Blick auf die Adapter-Schnittstelle werfen, werden Sie feststellen, dass es zwei spezifische Methoden enthält:

    • getViewTypeCount() die die Anzahl der Arten von Ansichten zurückgibt, die Ihr AdapterView verwaltet. Die meiste Zeit gibt diese Methode 1 zurück, da alle Elemente der ListView ähnlich sind. In diesem Fall wird durch die Rücksendung von 2 die ListView zwei Arten von Ansichten verarbeiten: die regulären Elementansichten und die Trennzeichenansichten
    • getItemViewType(int) muss eine Ganzzahl zwischen 0 (inklusive) und getViewTypeCount() (exklusiv) zurückgeben. Die angegebene Zahl drückt den Typ der Ansicht an der angegebenen Position aus. Zum Beispiel können wir sicherstellen, dass die zurückgegebenen Werte 0 für die regulären Elementansichten und 1 für die Trennzeichen sind

    Ich füge hier eine Antwort hinzu, seitdem ich einen anderen Weg dazu gemacht habe. Es sieht ein bisschen aus wie die Links @Phil posted.

    Zuerst setze ich ein String-Array des Menüs, das ich anzeigen möchte. Ich habe dieses Array in einer XML-Ressource-Datei für persönliche Bequemlichkeit geschrieben.

     <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="drawer_menu_options"> <item>Username</item> <item>-sep-Flirter</item> <item>Recherche</item> <item>Amis Facebook</item> <item>Flirts</item> <item>Compte premium</item> <item>-sep-Menu</item> <item>Réglages</item> <item>Inviter des amis</item> <item>CGU</item> </string-array> </resources> 

    Beachten Sie, dass ich zwei Elemente mit dem Präfix -sep- . Das sind unsere Trennzeichen.

    Dann kommt der DrawerMenuAdapter, den ich schon früher gezeigt habe, was noch ein ArrayAdapter ist, auf dem ich einige Funktionalitäten hinzugefügt habe:

     public class DrawerMenuAdapter extends ArrayAdapter<String>{ private Context context; private String[] values; private int resId; private int separatorId = 0; private int userbarId = 0; public DrawerMenuAdapter(Context context, int textViewResourceId, String[] values) { super(context, textViewResourceId, values); this.context = context; this.values = values; this.resId = textViewResourceId; } public void setSeparator(int resId){ separatorId = resId; } public void setUserbarId(int resId){ userbarId = resId; } @Override public View getView(int position, View convertView, ViewGroup parent){ View rowView; LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); if(userbarId != 0 && values[position].equals("Username")){ rowView = inflater.inflate(this.userbarId, parent, false); }else if(separatorId != 0 && values[position].startsWith("-sep-")){ rowView = inflater.inflate(this.separatorId, parent, false); }else{ rowView = inflater.inflate(this.resId, parent, false); } TextView elementText = (TextView)rowView.findViewById(R.id.element_text); String textValue = values[position]; /* If the current line is a separator, just display a separator. Otherwise, set the matching picture */ if(textValue.startsWith("-sep-")){ elementText.setText(textValue.substring("-sep-".length())); }else{ if(textValue.equals("Username")){ elementText.setText(context.getSharedPreferences("LovRUserSettings", 0) .getString("firstName", "Username")); }else{ elementText.setText(textValue); } ImageView elementImage = (ImageView)rowView.findViewById(R.id.element_icon); switch (position){ case 2: elementImage.setImageResource(R.drawable.search); break; case 3: elementImage.setImageResource(R.drawable.facebook_friends); break; case 4: elementImage.setImageResource(R.drawable.flirts_history); break; case 5: elementImage.setImageResource(R.drawable.premium); break; case 7: elementImage.setImageResource(R.drawable.settings); break; case 8: elementImage.setImageResource(R.drawable.share_app); break; case 9: elementImage.setImageResource(R.drawable.cgu); break; } } return rowView; } } 

    In diesem Code gibt es ein Objekt namens userBar . Sie müssen nicht wirklich darauf achten, aber wenn Sie interessiert sind, ist es ein anderes Menüelement, mit einer bestimmten Layout-Datei anstelle von dem, den ich für regelmäßige Menüelemente verwende. Es ist ein Weg zu demonstrieren, dass Sie hinzufügen können, was Art von spezifischen Layout überall Sie wollen, nur durch das Lesen Ihrer Saiten.

    Der wichtigste Punkt hier ist in der Art und Weise der Code sucht nach Trennzeichen, die Strings mit dem -sep- Präfix. Sobald einer gefunden ist, wird das Präfix entfernt und das passende Layout wird dem Trennzeichen zugewiesen.

    Aight, das habe ich gefunden Danach musst du deinen eigenen Weg finden, um Klick-Hörer hinzuzufügen. Minen werden in der DrawerLayout.setOnCliclListener implementiert, die grundsätzlich die Arbeit genau so macht wie die Google-Dokumentation sagt. Sie können aber auch setOnclickListener zu deiner Ansicht verwenden, wenn du sie hinzufügst und eine XML-Datei verwende, in der du eigene onClick Attribute einstellen kannst …

    Hoffe es wird helfen =)

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.