2011-11-02 15 views
36

I Looke en the ListView API y vi el método:Usando ListView: ¿Cómo agregar una vista de encabezado?

addHeaderView (Ver v)

Lo que quiero hacer es tener un diseño superior de la lista, es posible?

He intentado hacer algo como:

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 

También probé

setContentView(R.layout.tryview); 

pero también hacen que el accidente de aplicación.

¡La ayuda es muy apreciada!

Editar: El código para esta clase es:

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

publicar el registro de bloqueo. –

+0

Mira mi respuesta. Espero que te ayude. También consulte el enlace que mencioné en mi respuesta. – user370305

+0

@ user370305 - mira mi comentario en tu respuesta – Belgi

Respuesta

28

Simplemente no se puede utilizar la Vista como una cabecera de ListView.

Porque la vista que se está pasando debe estar inflada.

Consulte mi respuesta en Android ListView addHeaderView() nullPointerException for predefined Views para obtener más información.

EDIT:

mirada a este tutorial Android ListView and ListActivity - Tutorial.

EDIT 2: Este enlace se rompe Android ListActivity with a header or footer

+0

Intenté agregar View header = (Ver) getLayoutInflater(). Inflate (R.layout.headerView, null); ls.addHeaderView (encabezado); pero se bloquea. (He añadido esto después de la línea de lv.setAdapter \t (nueva ArrayAdapter (GroupsActivity.this, \t \t android.R.layout.simple_list_item_multiple_choice, your_array_contents));) – Belgi

+12

Antes de la versión 4.4 de Android no se puede utilizar después de addHeaderView método setAdapter . – DcodeChef

+0

Link Edit 2, da error 404, por lo que eliminarlo o corregir el enlace será apreciado. –

63

Usted puede añadir tantas cabeceras como desee llamando addHeaderView() varias veces. Tienes que hacerlo antes de configurar el adaptador a la vista de lista.

Y sí se puede añadir algo de cabecera como de esta manera:

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

no provocará un bloqueo, si lo agrega después. Así que creo que ese no es el problema. –

+1

@YashwanthKumar Esto es según el documento de Android: http://goo.gl/AWU4K, lea atentamente la sección NOTA :) –

+1

cierto, acabo de decir, no causará bloqueo, no mostrará la vista de encabezado. –

Cuestiones relacionadas