【问题标题】:Error while scrolling custom ListView [closed]滚动自定义 ListView 时出错 [关闭]
【发布时间】:2013-01-13 00:26:55
【问题描述】:

我正在创建应用程序,其中我在自定义 ListView 中显示数据......数据来自 XMLHandler。但是,当我滚动列表时,它给出了空指针错误.....

一次来自 xmlHandler 的六个项目只有 3 个项目显示在屏幕上....但是,当我滚动 getView() 时应该调用剩余的 3 个项目.....但是,它它要求再增加一项……因此它给出了空指针……我不知道该怎么做……请帮助我…… 谢谢你的建议。

*对不起,我忘了在我的问题中添加 getview(),但它在我的实际代码中。我已经编辑了我的代码...请查看此代码......***

public class SearchedRouteAdapter extends ArrayAdapter<BusGetSetters> {
    private final Activity activity;
    private List<BusGetSetters> listBusGS = Utils.arrayBusGetSetRoutes;
    String routeID, routeName, travelsName, busType, depTime, arrTime,
            seatsAvail, sellFare, ResCode;
    BusGetSetters searchBus = new BusGetSetters();

    public SearchedRouteAdapter(Activity activity, List<BusGetSetters> objects) {
        super(activity, R.layout.route_list_item, objects);
        this.activity = activity;
        this.listBusGS = objects;
    }

    @SuppressWarnings("deprecation")
    public View getView(int position, View convertView, ViewGroup parent) {
        View rowView = convertView;
        RouteSearchView hsView = null;

              if (rowView == null) {
            // Get a new instance of the row layout view
            LayoutInflater inflater = activity.getLayoutInflater();
            rowView = inflater.inflate(R.layout.route_list_item, null);
            Log.v("Log position", "2");

            // Hold the view objects in an object,
            // so they don't need to be re-fetched
            hsView = new RouteSearchView();
            hsView.routeSVname = (TextView) rowView
                    .findViewById(R.id.routeName);
            hsView.routeSVtravelsName = (TextView) rowView
                    .findViewById(R.id.travelsName);
            hsView.routeSVbusType = (TextView) rowView
                    .findViewById(R.id.busType);
            hsView.routeSVdepTime = (TextView) rowView
                    .findViewById(R.id.depTime);
            hsView.routeSVarrTime = (TextView) rowView
                    .findViewById(R.id.arrTime);
            hsView.routeSVseatsAvail = (TextView) rowView
                    .findViewById(R.id.seatsAvail);
            hsView.routeSVsellFare = (TextView) rowView
                    .findViewById(R.id.sellFare);
            hsView.routeSVcmdCheck = (Button) rowView
                    .findViewById(R.id.cmdCheck);
            // Cache the view objects in the tag,
            // so they can be re-accessed later
            Log.v("Log position", "3");
            rowView.setTag(hsView);

        } else {
            hsView = (RouteSearchView) rowView.getTag();
        }
        // Transfer the stock data from the data object
        // to the view objects
        searchBus = listBusGS.get(position);

            routeID = searchBus.getRoute_id().toString();
            routeName = searchBus.getService_name().toString();
            travelsName = searchBus.getTravels_name().toString();
            busType = searchBus.getBus_type().toString();
            depTime = searchBus.getDeparture_time().toString();
            arrTime = searchBus.getArival_time().toString();
            seatsAvail = searchBus.getSeats_available().toString();
            sellFare = searchBus.getSell_fare().toString();

            hsView.routeSVname.setText(routeName);
            hsView.routeSVtravelsName.setText(travelsName);
            hsView.routeSVbusType.setText(busType);
            hsView.routeSVdepTime.setText(depTime);
            hsView.routeSVarrTime.setText(arrTime);
            hsView.routeSVseatsAvail.setText(seatsAvail);
            hsView.routeSVsellFare.setText(sellFare);


        }

        return rowView;
    }
protected static class RouteSearchView {

        protected TextView routeSVname;
        protected TextView routeSVtravelsName;
        protected TextView routeSVbusType;
        protected TextView routeSVdepTime;
        protected TextView routeSVarrTime;
        protected TextView routeSVseatsAvail;
        protected TextView routeSVsellFare;
        protected Button routeSVcmdCheck;
    }
}

以下是Logcat输出:

02-01 15:59:22.852: E/AndroidRuntime(1964): FATAL EXCEPTION: main
02-01 15:59:22.852: E/AndroidRuntime(1964): java.lang.NullPointerException
02-01 15:59:22.852: E/AndroidRuntime(1964):     at com.demo.busbooking.SearchedRouteAdapter.getView(SearchedRouteAdapter.java:107)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.widget.AbsListView.obtainView(AbsListView.java:1430)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.widget.ListView.makeAndAddView(ListView.java:1745)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.widget.ListView.fillDown(ListView.java:670)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.widget.ListView.fillFromTop(ListView.java:727)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.widget.ListView.layoutChildren(ListView.java:1598)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.widget.AbsListView.onLayout(AbsListView.java:1260)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.view.View.layout(View.java:7175)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.view.View.layout(View.java:7175)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.view.View.layout(View.java:7175)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.view.View.layout(View.java:7175)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1140)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.os.Looper.loop(Looper.java:123)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at android.app.ActivityThread.main(ActivityThread.java:3683)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at java.lang.reflect.Method.invokeNative(Native Method)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at java.lang.reflect.Method.invoke(Method.java:507)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-01 15:59:22.852: E/AndroidRuntime(1964):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 声明 if (rowView == null) ... 不在任何方法范围内,所以我很确定上面的代码无法编译。另外,请发布 NullPointerException 的完整堆栈跟踪
  • 您应该发布 logcat 错误,以便于跟踪。
  • 我已经发布了 logcat 输出.....请查看它!!!

标签: android scroll custom-lists dynamic-content


【解决方案1】:

您需要重写ArrayAdaptergetView() 方法并将此代码放入其中。

public View getView(){  
if (rowView == null) {
            // Get a new instance of the row layout view
            LayoutInflater inflater = activity.getLayoutInflater();
            rowView = inflater.inflate(R.layout.route_list_item, null);
            Log.v("Log position", "2");

            // Hold the view objects in an object,
            // so they don't need to be re-fetched
            hsView = new RouteSearchView();
            hsView.routeSVname = (TextView) rowView
                    .findViewById(R.id.routeName);
            hsView.routeSVtravelsName = (TextView) rowView
                    .findViewById(R.id.travelsName);
            hsView.routeSVbusType = (TextView) rowView
                    .findViewById(R.id.busType);
            hsView.routeSVdepTime = (TextView) rowView
                    .findViewById(R.id.depTime);
            hsView.routeSVarrTime = (TextView) rowView
                    .findViewById(R.id.arrTime);
            hsView.routeSVseatsAvail = (TextView) rowView
                    .findViewById(R.id.seatsAvail);
            hsView.routeSVsellFare = (TextView) rowView
                    .findViewById(R.id.sellFare);
            hsView.routeSVcmdCheck = (Button) rowView
                    .findViewById(R.id.cmdCheck);
            // Cache the view objects in the tag,
            // so they can be re-accessed later
            Log.v("Log position", "3");
            rowView.setTag(hsView);

        } else {
            hsView = (RouteSearchView) rowView.getTag();
        }
        // Transfer the stock data from the data object
        // to the view objects
        searchBus = listBusGS.get(position);

            routeID = searchBus.getRoute_id().toString();
            routeName = searchBus.getService_name().toString();
            travelsName = searchBus.getTravels_name().toString();
            busType = searchBus.getBus_type().toString();
            depTime = searchBus.getDeparture_time().toString();
            arrTime = searchBus.getArival_time().toString();
            seatsAvail = searchBus.getSeats_available().toString();
            sellFare = searchBus.getSell_fare().toString();

            hsView.routeSVname.setText(routeName);
            hsView.routeSVtravelsName.setText(travelsName);
            hsView.routeSVbusType.setText(busType);
            hsView.routeSVdepTime.setText(depTime);
            hsView.routeSVarrTime.setText(arrTime);
            hsView.routeSVseatsAvail.setText(seatsAvail);
            hsView.routeSVsellFare.setText(sellFare);


        }

        return rowView;
    }

类似的东西。

【讨论】:

  • 对不起,我忘了在我的问题中添加 getview(),但它在我的实际代码中。我已经编辑了我的代码...请查看此代码......
【解决方案2】:

ArrayAdapter 构造函数不返回视图。您应该实现getView() 以返回View 以放置在ListView 的特定行中。

【讨论】:

  • 对不起,我忘了在我的问题中添加 getview(),但它在我的实际代码中。我已经编辑了我的代码...请查看此代码......
  • 请显示 LogCat 和您用于填充适配器的代码。
【解决方案3】:

我已经解决了问题,这是在 xml 处理程序中而不是这段代码,但感谢您的努力!

【讨论】:

    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    相关资源
    最近更新 更多