Создание обработчика событий
Для обработки нажатия на каждый товар используем адаптер. В методе onBindViewHolder класса КурсАдаптер, присваивающем значения элементам дизайна, устанавливаем обработчик событий:
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Код, срабатывающий при нажатии на товар
}
});
holder.itemView – элемент товара в списке.
Переход на новую страницу и передача данных
В обработчике создаём объект Intent для перехода на страницу КурсPage:
Intent intent = new Intent(context, КурсPage.class);
context.startActivity(intent);
context – объект адаптера. Передаём данные методом putExtra:
intent.putExtra("курсBg", цветКарточки);
intent.putExtra("курсImg", курсImg);
intent.putExtra("курсTitle", курсTitle);
intent.putExtra("курсDate", курсDate);
intent.putExtra("курсLevel", курсLevel);
intent.putExtra("курсТекст", курсТекст);
курсBg, курсImg, курсTitle, курсDate, курсLevel, курсТекст – ключи; соответствующие переменные – значения. В модель Курс нужно добавить метод getТекст(), для чего потребуется добавить поле текст, конструктор, геттер и сеттер. При создании объектов Курс в MainActivity необходимо передать значение для поля текст (в примере используется «тест»).
Приём данных на новой странице
В КурсPage создаём переменные для доступа к элементам дизайна:
ConstraintLayout курсBg = findViewById(R.id.курсBg);
ImageView курсImg = findViewById(R.id.курсImg);
TextView курсTitle = findViewById(R.id.курсTitle);
TextView курсDate = findViewById(R.id.курсDate);
TextView курсLevel = findViewById(R.id.курсLevel);
TextView курсТекст = findViewById(R.id.курсТекст);
Получаем переданные данные методом getIntent().getExtras():
int курсBgColor = getIntent().getIntExtra("курсBg", 0);
int курсImgRes = getIntent().getIntExtra("курсImg", 0);
String курсTitleStr = getIntent().getStringExtra("курсTitle");
String курсDateStr = getIntent().getStringExtra("курсDate");
String курсLevelStr = getIntent().getStringExtra("курсLevel");
String курсТекстStr = getIntent().getStringExtra("курсТекст");
курсBg.setBackgroundColor(курсBgColor);
курсImg.setImageResource(курсImgRes);
курсTitle.setText(курсTitleStr);
курсDate.setText(курсDateStr);
курсLevel.setText(курсLevelStr);
курсТекст.setText(курсТекстStr);
Используем getIntExtra для целых чисел и getStringExtra для строк. Для чисел указано значение по умолчанию.
Улучшение дизайна
Для удаления теней и обводки, а также корректировки отступов, используем атрибуты cardElevation и layout_marginTop в XML-разметке (КурсPage):
<androidx.cardview.widget.CardView
...
app_cardElevation="0dp"
... >
<TextView
...
android_layout_marginTop="10dp"
... />
</androidx.cardview.widget.CardView>
Анимация перехода
Для анимации перехода добавляем в AndroidManifest.xml атрибут android_windowActivityTransitions="true". Минимальная версия SDK должна быть 21 или выше (устанавливается в build.gradle).
В КурсАдаптер создаём объект ActivityOptions и устанавливаем анимацию:
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(
(Activity) context,
Pair.create(holder.курсImg, "курсImg"),
intent
);
context.startActivity(intent, options.toBundle());
В XML-разметках обоих Activity (КурсItem и КурсPage) для анимируемого изображения необходимо задать атрибут android_transitionName="курсImg".
Реализован переход между страницами с передачей данных и анимацией перехода изображения. Дизайн может быть дополнительно улучшен.