2013-08-21 29 views
9

Gibt es eine Möglichkeit zum Einfügen eines anderen View über die List in einer ListView? Zum Beispiel möchte ich eine Titelleiste (TextView), die auf der List sitzt, und scrollt aus der Sicht, während die Liste scrollt. Ich habe bisher zwei Möglichkeiten, dies zu tun, aber beide sind Hacks.ListView mit Titel


Idee # 1 - Verwenden Sie ein LinearLayout, das vorgibt, ein ListView zu sein. Das Problem besteht jedoch darin, dass Sie das "intelligente" Laden/Entladen von Ansichten eines Adapters nicht nutzen können.

<ScrollView> 
    <LinearLayout> 

     <TextView/> 
     <LinearLayout 
      android:orientation="vertical" /> # add ListItems here 

    </LinearLayout> 
</ScrollView> 


Idee # 2 - ein Hacky ArrayAdapter, mit einem getView ähnlichen Verfahren wie diese verwenden:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if(position == 0) 
     View view = inflater.inflate(R.layout.special_list_item, null); 
    else 
     View view = inflater.inflate(R.layout.regular_list_item, null); 

    ... 

    return vi; 
} 

Antwort

33

Einfach. Fügen Sie einfach einen Kopfsicht auf Ihre ListView

TextView textView = new TextView(context); 
textView.setText("Hello. I'm a header view"); 

listView.addHeaderView(textView); 
+5

Stellen Sie sicher, 'setAdapter (null) zu nennen;' vor den Header zu setzen. Oder fügen Sie den Adapter erst nach dem Setzen der Kopfzeile hinzu. – sriramramani

+0

Wow, ich hatte keine Ahnung, dass es existiert! – Matt