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

addHeaderView() usar addHeaderView() y addFooterView() para un ListView . Si trato de usar una Vista que he predefinido en XML para el encabezado o el pie de página, obtengo una excepción de puntero nulo. Sin embargo, si creo dinámicamente una vista usando 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 rastro de stack:

 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 has to be inflated . En pocas palabras, cuando setContentView al comienzo de su actividad, android framework automáticamente infla 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 establecer la vista de encabezado y ejecutar la aplicación. Debería ver su vista de encabezado con el contenido que coloca 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