public final static int BLUetoOTH_HEADER = 0; public final static int BLUetoOTH_PRINTER = 1; public final static int NET_HEADER = 2; public final static int NET_PRINTER = 3; public final static int CLOUD_HEADER = 4; public final static int CLOUD_PRINTER = 5;
holder.setting.setonClickListener(new View.OnClickListener() { @Override public void onClick(View v) { PrinterSettingActivity.navigateto(mContext, printerInfo); } }); final boolean finalConnected = connected; holder.connect.setonClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { listener.onConnectClicked(printerInfo, finalConnected); } } }); } }
public PrinterInfo getPrinterInfo(int position) { int index; if (position > 0 && position <= bluetoothCount) { index = position - 1; } else if (position > bluetoothCount + 1 && position <= netCount + bluetoothCount + 1) { index = position - 2; } else { index = position - 3; } return mPrinters.get(index); }
@Override public int getItemViewType(int position) { if (position == 0) { return TYPE_HEADER; } else if (position > 0 && position <= bluetoothCount) { return TYPE_PRINTER; } else if (position == bluetoothCount + 1) { return TYPE_HEADER; } else if (position > bluetoothCount + 1 && position <= netCount + bluetoothCount + 1) { return TYPE_PRINTER; } else if (position == netCount + bluetoothCount + 2) { return TYPE_HEADER; } else { return TYPE_PRINTER; } }
@Override public int getViewTypeCount() { return 2; }
@Override public int getCount() { if (mPrinters != null) { return mPrinters.size() + 3; } return 3; }
}
@Override public long getItemId(int position) { return position; }
FATAL EXCEPTION: main Process: com.maimairen.app.jinchuhuo.dev, PID: 15967 java.lang.Arrayindexoutofboundsexception: length=2; index=5 at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:6726) at android.widget.ListView.layoutChildren(ListView.java:1644) at android.widget.AbsListView.onLayout(AbsListView.java:2148) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.view.ViewRootImpl.performlayout(ViewRootImpl.java:2198) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1958) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1134) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6050) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:860) at android.view.Choreographer.doCallbacks(Choreographer.java:672) at android.view.Choreographer.doFrame(Choreographer.java:608) at android.view.Choreographer$FramedisplayEventReceiver.run(Choreographer.java:846) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5438) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
可以看到,ListView 从缓存中去取 view 的时候,是用的 Type 的值来作为 index 的,所以 Type 类型一定是从0开始的。 因为自己长期以来一直是之前的那种做法,错了太多次了,却没有及时发现错误,经过这次同事的指正,总算是纠正过来了。写篇博客备忘,忘性太大了~