12 Stimmen

Android fügt Fußzeile zu ListView addFooterView() hinzu?

Ich habe eine ListView-Aktivität, die eine Fußzeile für die Liste der Elemente benötigt, so dass Sie darauf klicken können, und es würde mehr Elemente in die Liste laden. Die Liste wird von einem SimpleAdapter unterstützt, der von einer Map mit Strings unterstützt wird, und bevor der Adapter gesetzt wird, mache ich dies, um die Fußzeile hinzuzufügen:

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

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

getListView().addFooterView(footer);

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

Aber ich erhalte diese Ausnahme im Debugger

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

Was ist falsch und wie kann ich meine Fußzeile in die Liste aufnehmen?

[EDIT] die Aktivität verwendet 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" />

21voto

Kman Punkte 2569

Alrighty Iv fand eine Lösung für mein Problem, wenn ich dies tun es funktioniert wie vorgesehen:

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));

Ich vermute, dass, da ich null in den Inflater als übergeordneten Parameter setzen, die Ansicht nicht zur aktuellen Inhaltsansicht hinzugefügt wurde und so mainActivity nicht in der Lage ist, es zu finden und jetzt, da ich explizit mit der übergeordneten Ansicht, die durch den Inflater zurückgegeben wird, um die TextView zu finden, es funktioniert.

2voto

Ryan Conrad Punkte 6810

Wie ognian in seinem obigen Kommentar feststellte, wird loadMore wahrscheinlich nicht gefunden.

Sie können sehen, ob dies das Problem ist, indem Sie Ihren Code in etwas wie dieses ändern:

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");
}

ohne mehr von Ihrem Code zu sehen, ist es schwer zu sagen, was die eigentliche Ursache ist.

0voto

Logan Punkte 1
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);  

Ich habe keine Ahnung, dass ich beim Hinzufügen von mSearchMoreBtn a ListView かわりに footerView ist es falsch, wenn ich stattdessen footerView a ListView , es ist einfach gut

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X