我有一个自定义适配器来显示无聊的东西列表。现在,我想添加一个带有摘要(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级别8和兼容包。活动是FragmentActivity,我在ViewPager中使用listView。
答案 0 :(得分: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;
现在它有效......
我个人认为没有意义......为什么视图类型应该从零开始?
答案 1 :(得分:0)
我猜数组的长度和数组中的项目没有问题..导致问题......
答案 2 :(得分:0)
对于你为什么会遇到崩溃并不是真正的答案,但听起来你真正想要的只是一个页脚。见this example。这样你就可以摆脱开关和类别代码。请记住,必须致电addFooterView()
,然后才能致电setAdapter()
。