ListView с несколькими макетами сбой при прокрутке


У меня есть пользовательский адаптер, чтобы показать список скучных вещей. Теперь я хочу добавить последний пункт с резюме (Resumen).

Я использую два макета и два видоискателя, и это вроде как работает Введите описание изображения здесь

Проблема начинается, когда я прокручиваю назад к первому пункту . Когда элемент" Resumen " исчезает (последний), действие завершается сбоем.

Позвольте мне показать вам код адаптера (соответствующие строки)

public class AdapterListaDeudaCliente extends BaseAdapter
{
    final private int VIEW_TYPES = 2;
    final private int TIPO_FACTURA = 1;
    final private int TIPO_RESUMEN = 2;

    public int getViewTypeCount()
    {
        return VIEW_TYPES; 
    }

    public int getItemViewType(int position) 
    {
        if(position%2==0)
            return TIPO_RESUMEN;
        else
            return TIPO_FACTURA;
    }

    public int getCount()
    {
        return data.length;
    }

    public View getView(int position, View convertView, ViewGroup parent)
    {
         int tipo = getItemViewType(position);
            switch(tipo)
            {
                case TIPO_FACTURA: convertView = layoutInflater.inflate(R.layout.elemento_deuda_basico, null);
                                                 break;
                case TIPO_RESUMEN: convertView = layoutInflater.inflate(R.layout.elemento_deuda_resumen, null);
                                                 break;
            }
        return convertView;
    }
}

И, наконец, журнал сбоев:

FATAL EXCEPTION: main
java.lang.ArrayIndexOutOfBoundsException
    at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:4078)
    at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2915)
    at android.widget.AbsListView.onTouchEvent(AbsListView.java:2065)
    at android.widget.ListView.onTouchEvent(ListView.java:3315)
    at android.view.View.dispatchTouchEvent(View.java:3766)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:897)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1701)
    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1111)
    at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1685)
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4635)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:916)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
    at dalvik.system.NativeStart.main(Native Method)

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

Спасибо!!

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

Это странно.

Дополнительная информация: я использую API level 8 и пакет совместимости. Активность-это фрагментация, и я использую listView внутри ViewPager.

3 2

3 ответа:

Это странно... но проблема здесь:

final private int VIEW_TYPES = 2;
final private int TIPO_FACTURA = 1;
final private int TIPO_RESUMEN = 2;

Я изменил его на:

final private int VIEW_TYPES = 2;
final private int TIPO_FACTURA = 0;
final private int TIPO_RESUMEN = 1;

И теперь это работает...

Лично я думаю, что это не имеет смысла... Почему тип представления должен начинаться с нуля?

Я предполагаю, что существует некоторая проблема с длиной массива и отсутствием элементов в массиве.. вот в чем проблема...

Не совсем ответ на то, почему вы получаете крах, но похоже, что вы действительно хотите получить нижний колонтитул. Смотрите Этот пример. Таким образом, вы можете избавиться от переключателей и кода категории. Помните, что вы должны позвонить addFooterView() прежде чем вы позвоните setAdapter().