попытка оптимизировать listview и сбой

#android #optimization #listview #io

#Android #оптимизация #listview #io

Вопрос:

Я пытаюсь принять рекомендацию Ромена Гая от Google IO в прошлом году о ViewHolder для списка, чтобы оптимизировать просмотр списка для примера из: http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters / (спасибо администратору) но всякий раз, когда я пытаюсь пролистать список или даже немного переместить его, приложение вылетает, что происходит? буду признателен за любую помощь 🙂 вот что я сделал >

 private class OrderAdapter extends ArrayAdapter<Order> {
    private ArrayList<Order> items;
    LayoutInflater mInflater;

    public OrderAdapter(Context context, int textViewResourceId, ArrayList<Order> items) {
        super(context, textViewResourceId, items);
        mInflater = LayoutInflater.from(context);
        this.items = items;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.row, parent, false);
            holder = new ViewHolder();
            holder.tt = (TextView) convertView.findViewById(R.id.toptext);
            holder.bt = (TextView) convertView.findViewById(R.id.bottomtext);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        Order o = items.get(position);
        if (o != null) {
            if (holder.tt != null) {
                holder.tt.setText("Name: "   o.getOrderName());
            }
            if (holder.bt != null) {
                holder.bt.setText("Status: "   o.getOrderStatus());
            }
        }
        return convertView;
    }
}
  

Это сообщение об ошибке, которое я получил, извините, я не знаю, как его отформатировать >

ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной java.lang.Исключение NullPointerException в com.softberries.lve.SoftwarePassionView$OrderAdapter.getView(SoftwarePassionView.java:98) в android.widget.AbsListView.obtainView(AbsListView.java:1294) в android.widget.ListView.makeAndAddView(ListView.java:1727) в android.widget.ListView.fillDown(ListView.java:652) в android.widget.ListView.fillGap(ListView.java:623) в android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944) в android.widget.AbsListView.onTouchEvent(AbsListView.java:2065) в android.widget.ListView.onTouchEvent (ListView.java: 3315) на android.view.View.dispatchTouchEvent(View.java:3766) на android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java: 897) на android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java: 936) на android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java: 936) на Android.view.dispatchTouchEvent(ViewGroup.java: android .view.ViewGroup.dispatchTouchEvent(ViewGroup.java: 936) на android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) на com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671) на com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) в android.app.Activity.dispatchTouchEvent(Activity.java:2086) в com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java: 1655) в android.view.ViewRoot.handleMessage(ViewRoot.java:1785) в android.os.Handler.DispatchMessage(Handler.java:99) в android.os.Looper.loop(Looper.java: 123) в android.app.ActivityThread.main(ActivityThread.java:4627) в java.lang.reflect .Метод.invokeNative (собственный метод) в java.lang.reflect.Method.invoke (метод.java: 521) на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) на dalvik.system.NativeStart.main(собственный метод)

Комментарии:

1. Во время сбоя в logcat появилось сообщение о том, что такое

2. ОШИБКА /AndroidRuntime(381): java.lang. Исключение NullPointerException

Ответ №1:

Я вижу holder = (ViewHolder) convertView.getTag(); . Но я не вижу, где вы вызываете setTag() for convertView в теле if (convertView == null) {...} .

Итак, я думаю, вы забыли строку:

 convertView.setTag(holder);
  

Ответ №2:

Скорее всего, вы получаете исключение ArrayIndexOutOfBound. Используйте метод getCount() адаптера массива, чтобы объявить размер списка.

Комментарии:

1. добавьте getCount, все та же проблема