#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, все та же проблема