Android列表视图滚动问题

Android列表视图滚动问题,android,listview,Android,Listview,大家好,我是Android编程的初学者,也是一名新开发人员,在我的Android项目中,我在下面的场景中遇到了一个问题, 我有一些大项目列表,这个列表有滚动,当开始滚动在列表中间的特定点,程序崩溃,并要求强制关闭。logcat说这是由于ArrayIndexOutOfBounds异常,我不确定应该对此做什么修改。。如果这是一个已知的问题,请任何人帮助我 我的代码 @Override public boolean areAllItemsEnabled() { return false; }

大家好,我是Android编程的初学者,也是一名新开发人员,在我的Android项目中,我在下面的场景中遇到了一个问题,
我有一些大项目列表,这个列表有滚动,当开始滚动在列表中间的特定点,程序崩溃,并要求强制关闭。logcat说这是由于ArrayIndexOutOfBounds异常,我不确定应该对此做什么修改。。如果这是一个已知的问题,请任何人帮助我

我的代码

@Override
public boolean areAllItemsEnabled() {
    return false;
}

@Override
public boolean isEnabled(int position) {
    return true;
}

public int getCount() {
    if (_UiRows != null)
        return _UiRows.size();
    return 0;
}

public Object getItem(int position) {
    return _UiRows.get(position);
}

// This function essentially disabled the flyweight caching by giving every row a unique type
// This works because we end up saving refreshes and thereby reducing GC 
public int getItemViewType(int position) {
    if (_UiRows == null)
        return 0;

    return position;
}

public int getViewTypeCount() {
    return 100; // Max edit rows
}

public long getItemId(int position) {
    return position;
}

public EditRowView getNewView(Context ctx) {
    return new EditRowView(ctx);
}

private EditViewProvider findCustomViewProvider(EditRowData row) {
    for (EditViewProvider p : _CustomViewProviders) {
        if (p.isCustomView(row))
            return p;
    }
    return null;
}

public View getView(int position, View convertView, ViewGroup parent) {
    EditRowView v = null;
    EditRowData row = (EditRowData) _UiRows.get(position);

    // NOTE: 
    // ListItemType starting at 0
    // Invisible -2 for hidden ones
    // Custom types starting at VIEWTYPE_CUSTOM_OFFSET, registered via RegisterCustomViewProvider

    // Create a view based on view type
    EditViewProvider viewProvider = findCustomViewProvider(row);
    if (row.IsVisible() == false) {
        return new View(parent.getContext());
    } else if (viewProvider != null) {
        return viewProvider.getView(row, convertView, parent);
    } else {
        // TODO: (Phase II) This area could use some refactoring to handle various types individually. 
        // Currently app types are handled by EditRowView, using more memory than necessary
        if (convertView != null && convertView instanceof EditRowView) {
            v = (EditRowView) convertView;
        } else {
            v = getNewView(parent.getContext());
            v.SetParent(this);
            v.SetBusinessLogic(_BL);
        }

        v.BindDataItem(row);
    }

    return v;
}
logcat代码段

> 11-25 16:08:08.667: E/IR-ProcessUIRequest(859): Request:
> TruckStatusTable, Action:  11-25 16:08:08.797: D/AndroidRuntime(859):
> Shutting down VM 11-25 16:08:08.797: W/dalvikvm(859): threadid=1:
> thread exiting with uncaught exception (group=0x40015560) 11-25
> 16:08:08.918: E/AndroidRuntime(859): FATAL EXCEPTION: main 11-25
> 16:08:08.918: E/AndroidRuntime(859):
> java.lang.ArrayIndexOutOfBoundsException 11-25 16:08:08.918:
> E/AndroidRuntime(859):    at
> android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:4540)
> 11-25 16:08:08.918: E/AndroidRuntime(859):    at
> android.widget.ListView.measureHeightOfChildren(ListView.java:1228)
> 11-25 16:08:08.918: E/AndroidRuntime(859):    at
> android.widget.ListView.onMeasure(ListView.java:1127) 11-25
> 16:08:08.918: E/AndroidRuntime(859):  at
> android.view.View.measure(View.java:8313) 11-25 16:08:08.918:
> E/AndroidRuntime(859):    at
> android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
> 11-25 16:08:08.918: E/AndroidRuntime(859):    at
> android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 11-25
> 16:08:08.918: E/AndroidRuntime(859):  at
> android.view.View.measure(View.java:8313) 11-25 16:08:08.918:
> E/AndroidRuntime(859):    at
> android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
> 11-25 16:08:08.918: E/AndroidRuntime(859):    at
> android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
> 11-25 16:08:08.918: E/AndroidRuntime(859):    at
> android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
> 11-25 16:08:08.918: E/AndroidRuntime(859):    at
> android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 11-25
> 16:08:08.918: E/AndroidRuntime(859):  at
> android.view.View.measure(View.java:8313) 11-25 16:08:08.918:
> E/AndroidRuntime(859):    at
> android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
> 11-25 16:08:08.918: E/AndroidRuntime(859):    at
> android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 11-25
> 16:08:08.918: E/AndroidRuntime(859):  at
> android.view.View.measure(View.java:8313) 11-25 16:08:08.918:
> E/AndroidRuntime(859):    at
> android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
> 11-25 16:08:08.918: E/AndroidRuntime(859):    at
> android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 11-25
> 16:08:08.918: E/AndroidRuntime(859):  at
> android.view.View.measure(View.java:8313) 11-25 16:08:08.918:
> E/AndroidRuntime(859):    at
> android.view.ViewRoot.performTraversals(ViewRoot.java:839) 11-25
> 16:08:08.918: E/AndroidRuntime(859):  at
> android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 11-25
> 16:08:08.918: E/AndroidRuntime(859):  at
> android.os.Handler.dispatchMessage(Handler.java:99) 11-25
> 16:08:08.918: E/AndroidRuntime(859):  at
> android.os.Looper.loop(Looper.java:123) 11-25 16:08:08.918:
> E/AndroidRuntime(859):    at
> android.app.ActivityThread.main(ActivityThread.java:3683) 11-25
> 16:08:08.918: E/AndroidRuntime(859):  at
> java.lang.reflect.Method.invokeNative(Native Method) 11-25
> 16:08:08.918: E/AndroidRuntime(859):  at
> java.lang.reflect.Method.invoke(Method.java:507) 11-25 16:08:08.918:
> E/AndroidRuntime(859):    at
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
> 11-25 16:08:08.918: E/AndroidRuntime(859):    at
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 11-25
> 16:08:08.918: E/AndroidRuntime(859):  at
> dalvik.system.NativeStart.main(Native Method) 11-25 16:08:09.277:
> D/dalvikvm(859): GC_CONCURRENT freed 519K, 38% free 5281K/8455K,
> external 547K/1046K, paused 8ms+19ms 11-25 16:08:09.517:
> I/dalvikvm(859): Jit: resizing JitTable from 1024 to 2048

你撞车的原因很明显

当您到达列表中的某个点时,实际上没有数据可填充并显示在列表中。这就是为什么当您到达适配器没有数据的点时,列表实际上不知道要显示什么,并强制关闭应用程序


检查适配器,确保列表中有足够的数据。

感谢Serdar的支持,适配器类有足够的数据。.列表非常庞大。在特定的点上,比如说当滚动超过50个项目时,滚动会意外崩溃。。我需要对scroller进行任何特定的修改吗..如果你的适配器有足够的数据,而你仍然得到一个空崩溃,这意味着你填充列表的方式以及你遍历适配器的方式有点错误,这会导致问题。你最好检查你的逻辑伙伴。它是由某个人开发的,我必须解决这个问题。。而且我是初学者,所以在启动时面临一些困难。最好检查公共视图getView方法中使用的所有类这是每行填充的地方。我的问题伙伴得到了解决方案。。。谢谢你的建议,你用错了。