Android ListView addHeaderView () nullPointerException para vistas predefinidas definidas en XML

Tratando de utilizar addHeaderView() y addFooterView() para un ListView . Si intento utilizar una vista que he predefinido en XML para el encabezado o pie de página, obtengo una excepción de puntero nulo. Sin embargo, si dinámicamente crear una vista utilizando código, funciona bien …

 // This doesn't work... nullPointerException ListView lv = (ListView) findViewById(R.id.my_list_view); TextView header = (TextView) findViewById(R.id.my_header); lv.addHeaderView(header); // This works fine ListView lv = (ListView) findViewById(R.id.my_list_view); TextView header = new TextView(this); TextView.setHeight(30); TextView.setText("my header text!"); lv.addHeaderView(header); 

Mi rastreo de la pila:

 Caused by: java.lang.NullPointerException at android.widget.ListView.clearRecycledState(ListView.java:522) at android.widget.ListView.resetList(ListView.java:508) at android.widget.ListView.setAdapter(ListView.java:440) at com.company.myapp.MyActivity.refreshList(MyActivity.java:85) at com.company.myapp.MyActivity.onCreate(MyActivity.java:37) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) ... 11 more 

¿Alguna pista?

    EDITAR:

    Simplemente no puedes hacer

     View header = findViewById(R.layout.headerView); lst.addHeaderView(header); 

    Esto NO funcionará porque la vista que se está pasando en has to be inflated . En pocas palabras, cuando haces setContentView al principio de tu actividad, el framework android infla automáticamente la vista y la pone en uso . Para inflar tu vista de encabezado, todo lo que tienes que hacer es

     View header = (View)getLayoutInflater().inflate(R.layout.headerView,null); ls.addHeaderView(header); 

    Por último, agregue su adaptador después de haber configurado la vista de encabezado y ejecutar la aplicación. Debería ver su vista de encabezado con el contenido que puso en su adaptador.

    En mi caso, esto funciona

     View header = getLayoutInflater().inflate(R.layout.header, null); View footer = getLayoutInflater().inflate(R.layout.footer, null); ListView listView = getListView(); listView.addHeaderView(header); listView.addFooterView(footer); setListAdapter(new ArrayAdapter<String(this,android.R.layout.simple_list_item_single_choice,android.R.id.text1, names)); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.