0

カスタムListViewにデータを表示するアプリを作成しています......データはXMLHandlerから来ています。しかし、リストをスクロールするとnullポインターエラーが発生します.....

一度にxmlHandlerから来る6つのアイテムがあり、画面には3つのアイテムしか表示されません....しかし、スクロールすると残りの3つのアイテムに対してgetView()が呼び出されるはずです....しかし、それはもう1つのアイテム....したがって、nullポインターが返されます...何をすべきかわかりません...親切に助けてください..... よろしくお願いします。

*申し訳ありませんが、質問に 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)
4

3 に答える 3

0

コンストラクターはArrayAdapterビューを返しません。の特定の行に配置されるgetView()を返すように実装する必要があります。ViewListView

于 2013-01-29T12:51:34.900 に答える
0

getView()メソッドをオーバーライドして、ArrayAdapterこのコードを内部に配置する必要があります。

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;
    }

それらの線に沿った何か。

于 2013-01-29T12:46:13.090 に答える