2011-11-02 18 views
36

Ho looke a the ListView API e ho visto il metodo:Utilizzo di ListView: come aggiungere una vista di intestazione?

addHeaderView (Visualizza v)

Quello che voglio fare è di avere un layout sopra l'elenco, è possibile?

Ho provato a fare qualcosa di simile:

EditText et=new EditText(this); 
    et.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT,  LayoutParams.WRAP_CONTENT)); 
    et.setInputType(InputType.TYPE_CLASS_TEXT); 
    addHeaderView(et); //makes app crash 

Ho anche provato

setContentView(R.layout.tryview); 

ma anche fare l'incidente app.

L'aiuto è molto apprezzato!

Edit: Il codice per questa classe è:

public class GroupsActivity extends ListActivity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    String your_array_contents[] = {"a","ab","c"}; 
    setListAdapter(new ArrayAdapter<String>(this, R.layout.groups_layout, your_array_contents)); 
    EditText et=new EditText(this); 
    et.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
    et.setInputType(InputType.TYPE_CLASS_TEXT); 

    ListView lv = getListView(); 
    lv.setTextFilterEnabled(true); 
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

    lv.setAdapter(new ArrayAdapter<String>(GroupsActivity.this, 
    android.R.layout.simple_list_item_multiple_choice, your_array_contents)); 
    lv.addHeaderView(et); //makes app crash 
    lv.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 
     // When clicked, show a toast with the TextView text 
    // Toast.makeText(getApplicationContext(), ((TextView) view).getText(), 
      //Toast.LENGTH_SHORT).show(); 
    } 
    }); 
} 


} 
+0

pubblicare il registro dei crash. –

+0

Guarda la mia risposta. Spero ti possa aiutare. Indica anche il link che ho menzionato nella mia risposta. – user370305

+0

@ user370305 - guarda il mio commento sulla risposta – Belgi

risposta

28

Semplicemente non è possibile utilizzare Visualizza come intestazione di ListView.

Perché la vista che viene passata deve essere gonfiata.

Guarda la mia risposta allo Android ListView addHeaderView() nullPointerException for predefined Views per maggiori informazioni.

EDIT:

Guardate questo tutorial Android ListView and ListActivity - Tutorial.

EDIT 2: Questo collegamento è rotto Android ListActivity with a header or footer

+0

Ho provato ad aggiungere View header = (Visualizza) getLayoutInflater(). Gonfia (R.layout.headerView, null); ls.addHeaderView (intestazione); ma si blocca. (Ho aggiunto questo dopo la linea \t lv.setAdapter (nuova ArrayAdapter (GroupsActivity.this, \t \t android.R.layout.simple_list_item_multiple_choice, your_array_contents));) – Belgi

+12

Prima di Android versione 4.4 non è possibile utilizzare addHeaderView dopo che il metodo setAdapter . – DcodeChef

+0

Link Edit 2, dà l'errore 404, quindi rimuoverlo o correggere il collegamento sarà apprezzato. –

63

È possibile aggiungere il numero di intestazioni che vuoi chiamando addHeaderView() più volte. Devi farlo prima di impostare l'adattatore per la visualizzazione elenco.

E sì è possibile aggiungere un'intestazione qualcosa di simile a questo modo:

LayoutInflater inflater = getLayoutInflater(); 
ViewGroup header = (ViewGroup)inflater.inflate(R.layout.header, myListView, false); 
myListView.addHeaderView(header, null, false); 
+0

non porterà a crash, se lo aggiungi dopo.so penso che non è questo il problema. –

+1

@YashwanthKumar Questo è come per il documento android: http://goo.gl/AWU4K, leggi attentamente la sezione NOTE :) –

+1

vero, ho appena detto, non causerà crash, non mostrerà la vista dell'intestazione. –

Problemi correlati