Подтвердить что ты не робот

Я использую listview add/remove footer для перекрестного приложения listview в версии 4.3 для Android.

Я использовал ListView, чтобы добавить нижний колонтитул, а также удалить нижний колонтитул, который он отлично работал в версии Android версии 4.4 выше  но проблема в версии 4.3 и ниже Я использую следующий код для добавления нижнего колонтитула

listfortestmyfeed.addFooterView(footerView);

и снимите нижний колонтитул с помощью кода

listfortestmyfeed.removeFooterView(footerView);

удалить нижний колонтитул, показывающий исключение класса cast в моем logcat

 07-11 20:07:49.665: E/ACRA(22818): com.sample.activities fatal error : com.sample.adapters.MyfeedAdapter cannot be cast to android.widget.HeaderViewListAdapter
    07-11 20:07:49.665: E/ACRA(22818): java.lang.ClassCastException: com.sample.adapters.MyfeedAdapter cannot be cast to android.widget.HeaderViewListAdapter
    07-11 20:07:49.665: E/ACRA(22818):  at android.widget.ListView.removeFooterView(ListView.java:390)
    07-11 20:07:49.665: E/ACRA(22818):  at com.sample.fragments.MyfeedNewFragment$FollowingBloopsdoinback.onPostExecute(MyfeedNewFragment.java:172)
    07-11 20:07:49.665: E/ACRA(22818):  at com.sample.fragments.MyfeedNewFragment$FollowingBloopsdoinback.onPostExecute(MyfeedNewFragment.java:1)
    07-11 20:07:49.665: E/ACRA(22818):  at android.os.AsyncTask.finish(AsyncTask.java:631)
    07-11 20:07:49.665: E/ACRA(22818):  at android.os.AsyncTask.access$600(AsyncTask.java:177)
    07-11 20:07:49.665: E/ACRA(22818):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
    07-11 20:07:49.665: E/ACRA(22818):  at android.os.Handler.dispatchMessage(Handler.java:99)
    07-11 20:07:49.665: E/ACRA(22818):  at android.os.Looper.loop(Looper.java:137)
    07-11 20:07:49.665: E/ACRA(22818):  at android.app.ActivityThread.main(ActivityThread.java:5103)
    07-11 20:07:49.665: E/ACRA(22818):  at java.lang.reflect.Method.invokeNative(Native Method)
    07-11 20:07:49.665: E/ACRA(22818):  at java.lang.reflect.Method.invoke(Method.java:525)
    07-11 20:07:49.665: E/ACRA(22818):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    07-11 20:07:49.665: E/ACRA(22818):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    07-11 20:07:49.665: E/ACRA(22818):  at dalvik.system.NativeStart.main(Native Method)

Я не узнал об ошибке, скажите, пожалуйста, кто-нибудь знает       благодарность

4b9b3361

Ответ 1

Вероятно, это вызвано вызовом setAdapter() в ListView перед вызовом setFooterView(). Это было необходимо во всех версиях Android до 4.4

Собственно, я не знал, что это ограничение было смягчено для KitKat, пока я не увидел этот вопрос...:)

В источниках addFooterView() для уровня API 15:

/*
 * NOTE: Call this before calling setAdapter. This is so ListView can wrap
 * the supplied cursor with one that will also account for header and footer
 * views.

Между тем, это KitKat, это ограничение было расслабленным:

/*
 * Note: When first introduced, this method could only be called before
 * setting the adapter with {@link #setAdapter(ListAdapter)}. Starting with
 * {@link android.os.Build.VERSION_CODES#KITKAT}, this method may be
 * called at any time.

Если вы хотите быть совместимым с пред-4.4, вам необходимо соблюдать порядок вызова, т.е.

  • addFooterView(footer);
  • setAdapter(adapter);
  • removeFooterView(footer);

Ответ 2

Да. Верхние и нижние колонтитулы действительно проблематичны с обратной совместимостью. Я недавно реорганизовал код, чтобы использовать относительный макет вместо нижнего колонтитула, который сделал довольно много, что я ожидал на любом устройстве → нижний колонтитул виден, нижний колонтитул ушел. Попробуйте это с помощью нижнего колонтитула ListView, это не сработает, вместо этого вам нужно вызвать addFooterView, removeFooterView, и даже это не работает, как указано. Крушение можно обойти с помощью

a = getAdapter()
setAdapter(null)
removeFooter()
setAdapter(a)

но нижний колонтитул все еще не работал.