Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
serSeventin
1 / 1 / 0
Регистрация: 09.11.2015
Сообщений: 95
#1

NullPointerException в адаптере RecyclerView - Программирование Android

11.12.2016, 18:23. Просмотров 206. Ответов 1
Метки нет (Все метки)

Здравствуйте уважаемые форумчане!
Столкнулся с такой проблемой, в RecyclerView создаю адаптер для добавления карточек, в карточке, в левом верхнем углу находится картинка, при нажатии на которую карточка увеличивается в размерах и в ней меняется FrameLayout.
Вот все исходники:
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
package com.example.max.recyclerviewmenu;
 
/**
 * Created by Max on 10.12.2016.
 */
 
public class CardMenu {
    int mImage;
    String mName;
    String mAmount;
    String mData;
    String mTime;
    String mAdd;
    String mDel;
 
    CardMenu(int image, String name, String amount, String data, String time, String add, String del) {
        mImage = image;
        mName = name;
        mAmount = amount;
        mData = data;
        mTime = time;
        mAdd = add;
        mDel = del;
    }
}
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
package com.example.max.recyclerviewmenu;
 
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.transition.ChangeBounds;
import android.transition.Fade;
import android.transition.Scene;
import android.transition.TransitionManager;
import android.transition.TransitionSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.widget.FrameLayout;
 
import java.util.ArrayList;
import java.util.List;
 
public class MainActivity extends AppCompatActivity {
    private RecyclerView mRecyclerView;
    private RecyclerAdapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
 
    private List<CardMenu> card_menu;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        initializeData();
 
        mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view_menu);
        mRecyclerView.setHasFixedSize(true);
 
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);
 
        mAdapter = new RecyclerAdapter(card_menu);
        mRecyclerView.setAdapter(mAdapter);
    }
 
    private void initializeData() {
        card_menu = new ArrayList<>();
 
        for (int i = 0; i < 100; i++) {
            card_menu.add(new CardMenu((i % 2) == 0 ? R.drawable.ic_tartuga1 :R.drawable.ic_tartuga2,
                    "Name", "Amount", "Data", "Time", "Add", "Del"));
        }
    }
}
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
130
131
132
133
134
135
136
137
138
139
package com.example.max.recyclerviewmenu;
 
import android.content.Context;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.transition.ChangeBounds;
import android.transition.Fade;
import android.transition.Scene;
import android.transition.TransitionManager;
import android.transition.TransitionSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.widget.ImageView;
import android.widget.TextView;
 
import java.util.List;
 
/**
 * Created by Max on 10.12.2016.
 */
 
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
    List<CardMenu> card_menu;
    Scene scene1;
    Scene scene2;
    ViewGroup parent;
    ViewGroup view_scene1;
    ViewGroup view_scene2;
 
    public static class ViewHolder extends RecyclerView.ViewHolder {
        CardView cv;
        public ImageView imageView;
        public TextView mName;
        public TextView mAmount;
        public TextView mData;
        public TextView mTime;
        public TextView mAdd;
        public TextView mDel;
 
        public ViewHolder(View v) {
            super(v);
            InitializeScene1(v);
        }
 
        void InitializeScene1(View v) {
            cv        = (CardView)  v.findViewById(R.id.card_view);
            imageView = (ImageView) v.findViewById(R.id.image_view);
            mName     = (TextView)  v.findViewById(R.id.name);
            mAmount   = (TextView)  v.findViewById(R.id.amount);
            mAdd      = (TextView)  v.findViewById(R.id.add);
            mDel      = (TextView)  v.findViewById(R.id.del);
        }
 
        void InitializeScene2(View v) {
            cv        = (CardView)  v.findViewById(R.id.card_view);
            imageView = (ImageView) v.findViewById(R.id.image_view);
            mName     = (TextView)  v.findViewById(R.id.name);
            mAmount   = (TextView)  v.findViewById(R.id.amount);
            mData     = (TextView)  v.findViewById(R.id.data);
            mTime     = (TextView)  v.findViewById(R.id.time);
            mAdd      = (TextView)  v.findViewById(R.id.add);
            mDel      = (TextView)  v.findViewById(R.id.del);
        }
    }
 
    public RecyclerAdapter(List<CardMenu> card_menu) {
        this.card_menu = card_menu;
    }
 
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Log.d("my", "onCreateViewHolder");
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.recycler_view_menu_item, parent, false);
 
        this.parent = parent;
 
        scene1 = Scene.getSceneForLayout(parent, R.layout.scene1, parent.getContext());
        scene2 = Scene.getSceneForLayout(parent, R.layout.scene2, parent.getContext());
 
        ViewHolder vh = new ViewHolder(v);
 
        return vh;
    }
 
    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        Log.d("my", "onBindViewHolder");
        Log.d("my", "position = " + position);
        holder.imageView.setImageResource(card_menu.get(position).mImage);
        holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d("my", "onClick!");
                TransitionSet set = new TransitionSet();
                set.addTransition(new Fade());
                set.addTransition(new ChangeBounds());
                set.setOrdering(TransitionSet.ORDERING_TOGETHER);
                set.setDuration(500);
                set.setInterpolator(new AccelerateInterpolator());
                TransitionManager.go(scene2, set);
                Log.d("my", "endClick!");
 
                View v = LayoutInflater.from(scene2.getSceneRoot().getContext())
                        .inflate(R.layout.recycler_view_menu_item, scene2.getSceneRoot(), false);
 
                holder.InitializeScene2(v);
 
                holder.imageView.setImageResource(card_menu.get(position).mImage);
                holder.mName.setText(card_menu.get(position).mName);
                holder.mAmount.setText(card_menu.get(position).mAmount);
                holder.mData.setText(card_menu.get(position).mData);
                holder.mTime.setText(card_menu.get(position).mTime);
                holder.mAdd.setText(card_menu.get(position).mAdd);
                holder.mDel.setText(card_menu.get(position).mDel);
            }
        });
        holder.mName.setText(card_menu.get(position).mName);
        holder.mAmount.setText(card_menu.get(position).mAmount);
        holder.mAdd.setText(card_menu.get(position).mAdd);
        holder.mDel.setText(card_menu.get(position).mDel);
    }
 
    @Override
    public int getItemCount() {
        return card_menu.size();
    }
 
    public Scene getScene1() {
        return  scene1;
    }
 
    public Scene getScene2() {
        return scene2;
    }
}
Ошибка происходит в функции:
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
holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d("my", "onClick!");
                TransitionSet set = new TransitionSet();
                set.addTransition(new Fade());
                set.addTransition(new ChangeBounds());
                set.setOrdering(TransitionSet.ORDERING_TOGETHER);
                set.setDuration(500);
                set.setInterpolator(new AccelerateInterpolator());
                TransitionManager.go(scene2, set);
                Log.d("my", "endClick!");
 
                View v = LayoutInflater.from(scene2.getSceneRoot().getContext())
                        .inflate(R.layout.recycler_view_menu_item, scene2.getSceneRoot(), false);
 
                holder.InitializeScene2(v);
 
                holder.imageView.setImageResource(card_menu.get(position).mImage);
                holder.mName.setText(card_menu.get(position).mName);
                holder.mAmount.setText(card_menu.get(position).mAmount);
                holder.mData.setText(card_menu.get(position).mData);
                holder.mTime.setText(card_menu.get(position).mTime);
                holder.mAdd.setText(card_menu.get(position).mAdd);
                holder.mDel.setText(card_menu.get(position).mDel);
            }
        });
Ошибка:
Java
1
2
Process: com.example.max.recyclerviewmenu, PID: 10574
                                                                                  java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v7.widget.RecyclerView$ViewHolder.shouldIgnore()' on a null object reference
Уважаемые гуру программирования под Android, прошу помочь, а то мне нужно скоро вставить этот код в проект, а он не работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2016, 18:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос NullPointerException в адаптере RecyclerView (Программирование Android):

Advanced RecyclerView и Expandable RecyclerView - Программирование Android
Сделал expandable recycler view на основе advancedRecyclerView сборочки, но не важно это думаю, наследуется от обычного RecyclerView. ...

RecyclerView внутри recyclerView - Программирование Android
Добрый день. Хочу сделать список recyclerView c горизонтальной прокруткой, который отображает допустим 20 элементов(card). Т.е....

Убить поток в адаптере - Программирование Android
После Делфи не до конца понимаю работу &quot;сборщика мусора&quot; Явы. Привык &quot;подчищать&quot; за собой сам. Есть адаптер на основе BaseAdapter В...

Показывать или скрывать записи в адаптере - Программирование Android
Создаю адаптер со всеми записями для RecycleView а потом нажимаю кнопку и меняю условие отображение (например должны отображаться...

Загрузки изображений из сети в адаптере GridView - Программирование Android
Загружаю картинки в адаптере gridview: //.. viewHolder.name.setText(arrayList.get(position).get(&quot;name&quot;)); ...

Назначить идентификаторы кнопкам в адаптере списка - Программирование Android
Есть цикл генерации данных для адаптера списка void fillData() { for (int i = 1; i &lt;= 17; i++) { String...

1
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
12.12.2016, 11:18 #2
во-первых это не весь лог ошибки
во-вторых где метод shouldIgnore() ?? его вообще нет в коде
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2016, 11:18
Привет! Вот еще темы с ответами:

Поиск по ListView основанному на кастомном адаптере - Программирование Android
Есть кастомный адаптер. ListView сделан на его основе. Данные загружаются из БД. Делаю поиск по позициям листа. Дописал в класс кастомного...

Не обновлять айтемы в адаптере когда скроллим список - Программирование Android
Такая проблема, есть адаптер с чекбоксами, я выбираю чекбоксы, потом опускаю список ниже, подымаю его и эти чекбоксы снова сняты, как этого...

Filterable не понимаю как в адаптере взять String значение по позиции ? - Программирование Android
fragment: inputSearch.addTextChangedListener(new TextWatcher() { @Override public void...

Как брать путь картинки в sqlite, и сетить на айтем в адаптере? - Программирование Android
Добрый день! подскажите пожалуйста как это делается? в getView() адаптера так: titleI =...


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

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

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