Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
shulyakyarik
10 / 10 / 3
Регистрация: 28.03.2014
Сообщений: 156
#1

Ошибка при прокрутке списка - Android

24.12.2014, 14:20. Просмотров 462. Ответов 2
Метки нет (Все метки)

Создается список нормально, вниз прокручивается ,а когда обратно скролить вверх то при отображении первого элемента краш.
Вот адаптер
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
public class MainActivityAdapter extends BaseAdapter {
 
    Context context;
    LayoutInflater inflater;
 
    public MainActivityAdapter(Context context){
        this.context = context;
        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
 
    @Override
    public int getCount() {
        return 9;
    }
 
    @Override
    public Object getItem(int position) {
        return null;
    }
 
    @Override
    public long getItemId(int position) {
        return 0;
    }
 
    @Override
    public int getViewTypeCount() {
        return 4;
    }
 
    @Override
    public int getItemViewType(int position) {
        switch (position){
            case 1:
                return 1;
            case 2:
            case 3:
            case 4:
            case 5:
                return 2;
            case 6:
                return 3;
            case 7:
            case 8:
            case 9:
                return 4;
            default:
                return 3;
        }
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        switch (position){
            case 0:
                return First(convertView);
            case 1:
            case 2:
            case 3:
            case 4:
                return Second(position,convertView);
            case 5:
                return Third(convertView);
            case 6:
            case 7:
            case 8:
                return Fourth(position,convertView);
            default:
                return new View(context);
        }
    }
 
    View First(View convertView){
        if(convertView==null)
            convertView = inflater.inflate(R.layout.nav_drawer_first,null);
        return convertView;
    }
    View Second(int position,View convertView){
        if(convertView==null){
            convertView = inflater.inflate(R.layout.nav_drawer_second,null);
            TextView tv = (TextView)convertView.findViewById(R.id.textView3);
            ImageView imageView = (ImageView)convertView.findViewById(R.id.imageView);
            switch(position){
                case 1:
                    tv.setText(context.getString(R.string.my_tasks));
                    imageView.setImageResource(R.drawable.ic_action_ic_done_all_black_48dp);
                    break;
                case 2:
                    tv.setText(context.getString(R.string.my_files));
                    imageView.setImageResource(R.drawable.ic_action_ic_cloud_download_black_48dp);
                    break;
                case 3:
                    tv.setText(context.getString(R.string.my_events));
                    imageView.setImageResource(R.drawable.ic_action_ic_event_black_48dp);
                    break;
                case 4:
                    tv.setText(context.getString(R.string.my_transactions));
                    imageView.setImageResource(R.drawable.ic_action_ic_trending_up_black_48dp);
                    break;
            }
        }
        return convertView;
    }
    View Third(View convertView){
        if(convertView==null){
            RelativeLayout rl = new RelativeLayout(context);
            AbsListView.LayoutParams params = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,2);
            rl.setLayoutParams(params);
            rl.setBackgroundColor(Color.parseColor("#EEEFEE"));
            convertView = rl;
        }
        return convertView;
    }
    View Fourth(int position,View convertView){
        if(convertView==null){
            convertView = inflater.inflate(R.layout.nav_drawer_fourth,null);
            TextView tv = (TextView)convertView.findViewById(R.id.textView4);
            switch(position) {
                case 6:
                    tv.setText(context.getString(R.string.stared)); break;
                case 7:
                    tv.setText(context.getString(R.string.company)); break;
                case 8:
                    tv.setText(context.getString(R.string.settings)); break;
            }
        }
        return convertView;
    }
}
Вот логи
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
java.lang.ArrayIndexOutOfBoundsException: length=4; index=4
            at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:6739)
            at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5114)
            at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3243)
            at android.widget.AbsListView.onTouchMove(AbsListView.java:3587)
            at android.widget.AbsListView.onTouchEvent(AbsListView.java:3431)
            at android.view.View.dispatchTouchEvent(View.java:7713)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2329)
            at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1568)
            at android.app.Activity.dispatchTouchEvent(Activity.java:2458)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2277)
            at android.view.View.dispatchPointerEvent(View.java:7893)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3950)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3829)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3521)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3422)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3578)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3422)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395)
            at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5535)
            at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5515)
            at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5486)
            at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5615)
            at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
            at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
            at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
            at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5588)
            at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:5634)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:7
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2014, 14:20     Ошибка при прокрутке списка
Посмотрите здесь:

Android Ошибка добавления списка контактов в ListView
Получить id записи в бд при нажатии на пункт списка Android
Изображения в прокрутке (ScrolView) Android
Сохранить измененные значения EditText в ListView при прокрутке Android
Белый фон при прокрутке listview и actionbar в android 2.1 Android
Android Подгрузка данных при достижении конца списка
Android Перезагрузка списка при смене ориентации приложения
Android При прокрутке listview изображения подгружаются, но происходит "скачок" списка
Обновление списка при выходе из DialogFragment Android
Как сделать границы в пространстве ImageView при прокрутке изображения Android
Android Программа вылетает при прокрутке ListActivity
Android Вылетает при прокрутке

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
24.12.2014, 15:01     Ошибка при прокрутке списка #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Лог не весь, поди...

Добавлено через 9 минут
Для начала обрати внимание

public abstract int getItemViewType (int position)

Added in API level 1
Get the type of View that will be created by getView(int, View, ViewGroup) for the specified item.

Parameters
position The position of the item within the adapter's data set whose view type we want.
Returns
An integer representing the type of View. Two views should share the same type if one can be converted to the other in getView(int, View, ViewGroup). Note: Integers must be in the range 0 to getViewTypeCount() - 1. IGNORE_ITEM_VIEW_TYPE can also be returned.
У тебя же getViewTypeCount() возвращает 4, а значит getView должен возвращать значения 0..3.

В коде же
Java
1
2
3
4
case 7:
case 8:
case 9:
           return 4;
Ферштейн?
shulyakyarik
10 / 10 / 3
Регистрация: 28.03.2014
Сообщений: 156
24.12.2014, 15:26  [ТС]     Ошибка при прокрутке списка #3
Armagedo, исправил 1...4 на 0..3 и больше не крашится. Благодарю за оперативность
Yandex
Объявления
24.12.2014, 15:26     Ошибка при прокрутке списка
Ответ Создать тему
Опции темы

Текущее время: 11:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru