2

我有一个自定义适配器来显示无聊的东西列表。现在,我想添加一个带有摘要(简历)的最后一项。

我正在使用两个布局和两个视图,它有点工作 在此处输入图像描述

当我滚动回第一项时,问题就开始了。当“简历”项消失(最后一项)时,活动崩溃。

让我向您展示适配器代码(相关行)

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 级别 8 和兼容性包。该活动是一个 FragmentActivity,我在 ViewPager 中使用 listView。

4

3 回答 3

5

这很奇怪......但问题就在这里:

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;

现在它起作用了......

我个人认为这没有任何意义......为什么视图类型应该从零开始?

于 2012-04-10T11:59:12.010 回答
0

我猜数组的长度和数组中的项目数存在一些问题..这导致了问题......

于 2012-04-09T14:19:46.350 回答
0

不是你为什么会崩溃的答案,但听起来你真正想要的是页脚。请参阅此示例。这样您就可以摆脱开关和类别代码。请记住,您必须先打电话addFooterView() ,然后再打电话setAdapter()

于 2012-04-09T14:43:17.473 回答