Android — ListActivity, добавить представление верхнего и нижнего колонтитула

Я использую ListActivity, список.

listView = getListView();

просто отлично работает. Я добавил вид нижнего колонтитула как

LayoutInflater inflater = getLayoutInflater();
listView.addFooterView( inflater.inflate( R.layout.footer, null ), null, false);

и все было блестящим, но уродливым, поэтому я хотел добавить это представление нижнего колонтитула (которое содержит только 1 текст редактирования и только 1 кнопку) в заголовок listView как

LayoutInflater inflater = getLayoutInflater();
listView.addHeaderView( inflater.inflate( R.layout.footer, null ), null, false);

и вдруг все идет не так, и я немедленно получаю RuntimeException.

Suspended(exception RuntimeException)
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent)
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent)
ActivityThread.access$2200(ActivityThread, Activity$ActiviyRecord, Intent),
so on..

Почему выдает исключение? В чем разница между addFooterView и addHeaderView и как я могу добавить заголовок в ListActivity?

ОБНОВИТЬ

Итак, как вы можете прочитать в комментариях, мой логарифм все еще не работает, но я только что попробовал в этот момент:

} catch(Exception e){ 
  Writer result = new StringWriter(); 
  PrintWriter printWriter = new PrintWriter(result);
  e.printStackTrace(printWriter);
  String error = result.toString(); 
}

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

java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called. 

это было поучительно для всех нас. После изменения вида команд он работает отлично.


person Victor    schedule 15.04.2012    source источник
comment
@добавьте сюда полный логарифм...   -  person Samir Mangroliya    schedule 15.04.2012
comment
logcat вообще не работает: S никогда не работал со мной   -  person Victor    schedule 15.04.2012
comment
@Victor: logcat вообще не работает: S никогда не работал со мной. Вы имеете в виду, что не знаете, как получить доступ к данным logcat? Запустите любой эмулятор или подключите телефон к ПК и используйте DDMS в eclipse, и вы увидите, что каждое работающее приложение будет выводить данные в logcat.   -  person Squonk    schedule 15.04.2012
comment
@MisterSquonk, я имею в виду, logcat ничего не сообщает   -  person Victor    schedule 15.04.2012
comment
@Victor: затем перехватите исключение с помощью catch(Exception e) и в блоке перехвата используйте e.printStackTrace()   -  person Squonk    schedule 15.04.2012
comment
но единственное, что я изменил, это изменить addFooterView на addHeaderView. и addFooterView работает каждый раз, но «addHeaderView» не работает   -  person Victor    schedule 15.04.2012
comment
@MisterSquonk я сделал. и, к сожалению, действительно ничего не сообщает   -  person Victor    schedule 15.04.2012
comment
Вам нужно научиться пользоваться инструментами. Вы намеренно препятствуете получению необходимой отладочной информации, приостанавливая выполнение в исключительных случаях. Не делай это. Разрешите сбою приложения, и ваша трассировка стека появится в LogCat.   -  person CommonsWare    schedule 15.04.2012
comment
Не вините меня, пожалуйста. LogCat по-прежнему не работает. Я нашел способ прочитать ошибку, я обновил вопрос. Спасибо !   -  person Victor    schedule 15.04.2012


Ответы (3)


Как вы входите

java.lang.IllegalStateException: невозможно добавить представление заголовка в список — setAdapter уже был вызван.

Метод Listview addHeaderView или addFooterView должен вызываться до setAdapter.

person anticafe    schedule 15.04.2012
comment
да, я тоже хотел добавить ответ, но мне пришлось ждать 8 часов, чтобы ответить на мой собственный вопрос из-за моей низкой репутации. - person Victor; 15.04.2012

Создать макет xml для верхнего и нижнего колонтитула

header_layout.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="header"
    />
    </RelativeLayout>

footer_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="footer"
/>
</RelativeLayout>

теперь в java-файл активности добавляется метод onCreate()

listView = (ListView) findViewById(R.id.listView1);
LayoutInflater inflater = getLayoutInflater();
    ViewGroup header = (ViewGroup) inflater.inflate(R.layout.header, listView,
            false);
    ViewGroup footer = (ViewGroup) inflater.inflate(R.layout.footer, listView,
            false);
    listView.addHeaderView(header, null, false);
    listView.addFooterView(footer, null, false);
    listView.setAdapter(adapter);
person Yatish    schedule 22.09.2015

поэтому, если вы хотите добавить представление заголовка в свой listView, вы должны сделать это серьезно, прежде чем использовать setListAdapter(), иначе это вызовет исключение IllegalStateException.

person Victor    schedule 30.04.2012
comment
Вы ответили на свой вопрос через 2 недели после того, как антикафе предоставило тот же ответ, просто чтобы выбрать его как правильный ответ. Это совсем не в духе СО. - person Nick Cardoso; 26.01.2014
comment
Да, если вы читаете комментарии и обновления, вы можете видеть, что я нашел ответ самостоятельно. Я хотел ответить на вопрос, но не смог из-за своей низкой репутации. Ведь вы отмечаете мой правильный ответ. Это совсем не в духе SO. - person Victor; 23.03.2014
comment
Нет, Виктор, вы же не написали ни одного комментария, говоря об этом. И даже если вы это сделали, вы должны быть благодарны за то, что кто-то дал вам четкий ответ. - person Erdal G.; 30.07.2015
comment
Уважаемый Э. Гуньяр. Внятного ответа мне никто не дал, и ясно, что вы совершенно не представляете, о чем говорите. Во всяком случае, этот вопрос был задан 3 года назад ... не хочу быть таким важным, пожалуйста. - person Victor; 27.09.2015