Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
shulyakyarik
11 / 11 / 3
Регистрация: 28.03.2014
Сообщений: 156
#1

Ошибка при прокрутке списка - Программирование Android

24.12.2014, 14:20. Просмотров 601. Ответов 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
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2014, 14:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка при прокрутке списка (Программирование Android):

При прокрутке listview изображения подгружаются, но происходит "скачок" списка
Здравствуйте. Использую listview и item с текстом и изображениями. При...

Вылетает при прокрутке
Доброе утро. Тут небольшая проблема возникла. У меня в ListView формируется...

Вызов метода при прокрутке activity
Как обработать событие когда activity прокрутили в самый низ что бы вызвать...

Программа вылетает при прокрутке ListActivity
Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь? Моя...

Нескролящийся View при прокрутке ScrollView
Здравствуйте. Есть задача сделать View, который при скролинге не уходил, а...

Сохранить измененные значения EditText в ListView при прокрутке
Добрый день, прошу помощи, т.к. уже долго и безрезультатно пытаюсь решить...

2
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
24.12.2014, 15:01 #2
Лучший ответ Сообщение было отмечено shulyakyarik как решение

Решение

Лог не весь, поди...

Добавлено через 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;
Ферштейн?
1
shulyakyarik
11 / 11 / 3
Регистрация: 28.03.2014
Сообщений: 156
24.12.2014, 15:26  [ТС] #3
Armagedo, исправил 1...4 на 0..3 и больше не крашится. Благодарю за оперативность
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2014, 15:26
Привет! Вот еще темы с решениями:

Белый фон при прокрутке listview и actionbar в android 2.1
При прокрутке ListView на Android 2.3 появляется белый фон. Ставил Cache Color...

Как сделать границы в пространстве ImageView при прокрутке изображения
Как сделать границы в пространстве ImageView при прокрутке большого изображения...

ListView: сбивается содержимое ImageView элемента при скроллинге + как сделать выделение пункта списка при нажатии?
1. Есть свой класс ContactsSimpleCursorAdapter, в методе public void...

Как изменить цвет пункта ListView при нажатии на него и сохранять его цвет при проматывании списка?
Здравствуйте, подскажите, пожалуйста, как изменить цвет пункта ListView при...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru