Android добавляет нижний колонтитул в ListView addFooterView ()? - PullRequest
12 голосов
/ 12 июля 2010

У меня есть действие ListView, которому нужен нижний колонтитул в списке элементов, чтобы вы могли щелкнуть по нему, и он бы загружал больше элементов в список.Список поддержан моим SimpleAdapter, подкрепленным картой строк, и перед тем, как установить адаптер, я делаю этот порядок, чтобы добавить нижний колонтитул:

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

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

getListView().addFooterView(footer);

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

Но я получаю это исключение в отладчике

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

Что не так и как мне добавить мой нижний колонтитул в список?

[ПРАВИТЬ] действие использует 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" />

Ответы [ 3 ]

21 голосов
/ 13 июля 2010

Отлично, Iv нашел решение моей проблемы, если я сделаю это, он будет работать как задумано:

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

Я предполагаю, что, поскольку я положил значение NULL в инфлятор в качестве родительского параметра, представление не было добавлено в текущее представление содержимого, и поэтому mainActivity не может его найти, и теперь, поскольку я явно использую родительское представление, возвращается инфлятором, чтобы найти TextView, с которым он работает.

2 голосов
/ 12 июля 2010

, как сказал Огниан в своем комментарии выше, loadMore, вероятно, не найден.

Вы можете увидеть, если это проблема, изменив свой код на что-то вроде этого:

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

безвидя больше вашего кода, трудно сказать, какова истинная причина.

0 голосов
/ 13 августа 2012
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);  

Я понятия не имею, что когда я добавляю mSearchMoreBtn к ListView как footerView, это неправильно, вместо этого, когда я добавляю footerView к ListView, это просто прекрасно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...