2010-07-12 14 views
11

Tengo una actividad ListView que necesita un pie de página para la lista de elementos para que pueda hacer clic y cargará más elementos en la lista. La lista está respaldada mi SimpleAdapter un respaldo de un mapa de cuerdas y antes de que se establece el adaptador hago esto finde para añadir el pie de página:Android agregando pie de página a ListView addFooterView()?

mInflater.inflate(R.layout.list_load_more_row, null); 

TextView footer = (TextView) findViewById(R.id.loadMore); 

getListView().addFooterView(footer); 

setListAdapter(ListViewHelper.getAdapterForContentList(mContent, this)); 

Pero Im que consigue esta excepción en el depurador

java.lang .NullPointerException android.widget.ListView.clearRecycledState (ListView.java:489) android.widget.ListView.resetList (ListView.java:476) android.widget.ListView.setAdapter (ListView.java:417)

¿Qué sucede y cómo voy a agregar mi pie de página a la lista? ?

[EDIT] la actividad está usando list_load_more_row.xml:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/loadMore" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textSize="17sp" 
     android:textStyle="bold" 
     android:textColor="#000000" 
     android:ellipsize="marquee" 
     android:marqueeRepeatLimit="marquee_forever" 
     android:gravity="center_horizontal|center_vertical" 
     android:text="@string/hello" /> 
+0

probablemente debería publicar el código XML también. – Christian

+0

podría necesitar más código, ¿podría publicar un informe de logcat más detallado? – st0le

+0

Probablemente no encuentre R.id.loadMore inflated – ognian

Respuesta

21

Alrighty Iv encontró una solución a mi problema si hago esto funciona como se esperaba:

View view = mInflater.inflate(R.layout.list_load_more_row, null); 

TextView footer = (TextView) view.findViewById(R.id.loadMore); 

getListView().addFooterView(footer); 

setListAdapter(ListViewHelper.getAdapterForContentList(mContent, this)); 

supongo que desde que puse nulo en el inflador como el parámetro padre, la vista no ha sido agregado a la vista de contenido actual y, por lo tanto, mainActivity no puede encontrarlo y ahora, dado que estoy utilizando explícitamente la vista principal que devuelve el inflador para encontrar TextView, está funcionando.

+1

espero que pueda obtener la vista, necesito su ayuda para establecer el pie de página en la parte inferior de mi lista, initilly pie de página aparece en la parte inferior de la lista y tiene la opción de hacer clic para cargar más, haga clic en evento los datos se han cargado pero el pie de página se mueve hacia abajo en cada clic desde el pie de página. ayúdame a resolver este problema. – MGSenthil

+0

No estoy seguro de lo que quiere decir con "evento después del clic los datos se han cargado pero el pie de página se mueve hacia abajo en cada clic desde el pie de página" pero lo que estoy haciendo después de obtener nuevos datos es crear un nuevo adaptador y luego llamar a 'setListAdapter()' de nuevo. Sin embargo, esto hace que la lista comience desde arriba, así que ajusto la posición de la lista llamando a 'getListView(). SetSelection (newPosition)' Espero que ayude! – Kman

+1

Con SDK 21, recibe una advertencia si pasa null para 'inflar'. En su lugar, use 'mInflater.inflate (R.layout.list_load_more_row, getListView(), false) '. –

2

como Ognian indica en su comentario anterior, loadMore es, probablemente, no se encuentra.

se puede ver si este es el problema cambiando su código a algo como esto:

TextView footer = (TextView) findViewById(R.id.loadMore); 
if (footer != null) { 
    getListView().addFooterView(footer); 
    setListAdapter(ListViewHelper.getAdapterForContentList(mContent, this)); 
} else { 
    throw new NullPointerException("footer is null"); 
} 

sin ver más de su código, es difícil decir cuál es la causa real es.

+0

Hola gracias y tu derecha parece que loadMore no se está encontrando .. .agregó más código espero que ayude – Kman

0
View footerView = getLayoutInflater().inflate(R.layout.search_footer, 
      mContentList, false); 
    LongButton mSearchMoreBtn = (LongButton) footerView 
      .findViewById(R.id.searchmore_btn); 
    mSearchMoreBtn.setText(R.string.search_moreapp);//the button to add 
    mSearchMoreBtn.setBackgroundResource(R.drawable.btn_long_selector); 
    mSearchMoreBtn.setOnClickListener(mSearchMoreBtnListener); 

    footerView.setOnClickListener(mLoadMoreAppsListener); 
    mContentList.addFooterView(footerView); 

que no tienen idea de que cuando la adición mSearchMoreBtn a ListView como footerView, no es correcto, en cambio, cuando la adición footerView a ListView, es bien

Cuestiones relacionadas