Не получается оптимизировать код при работе с Firebase и cardview. Большое количество cardview
У меня в приложении будет около 300 cardView и каждая получает данные из коллекции с Firestore. Код, указанный ниже используется для получения данных из коллекции для одной cardView. Подскажите, что можно сделать чтобы не писать этот код 300 раз отдельно для каждой cardView?
FirebaseFirestore db = FirebaseFirestore.getInstance(); //dialog.show(); db.collection("cardview1") .get().addOnCompleteListener(task -> { if (task.isSuccessful()) { for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) { String title = document.getString("title"); tvItem_title_vetA.setText(title); String address = document.getString("address"); tvItem_address_vetA.setText(address); String workingTime = document.getString("workingTime"); tvItem_workingTime_vetA.setText(workingTime); String telNum = document.getString("telNum"); tvItem_telNum_vetA.setText(telNum); Log.d("ololo", document.getId() + " => " + document.getData()); } } else { Log.w("ololo", "Error getting documents.", task.getException()); } });В каждой из 300 cardView у меня есть 3 кнопки. Можно ли также как-нибудь оптимизировать данные код, чтобы не писать его для всех 300 cardview? При этом в некоторых cardView может быть не 3 кнопки, а только 2 или 1 (зависит от наличия страницы в Инстаграм / почты / сайта). В проекте использую ScrollView. RecyclerView использовать не смог, т.к. были большие сложности с отработкой нажатия на кнопки (т.к. нажатие на определенную кнопку открывает определенную ссылку).
btnItem1_instagram.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Uri uri = Uri.parse("http://instagram.com/_u/test"); Intent i= new Intent(Intent.ACTION_VIEW,uri); i.setPackage("com.instagram.android"); try { startActivity(i); } catch (ActivityNotFoundException e) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://instagram.com/test"))); } } }); btnItem1_email.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String[] emails = new String[]{"[email protected]"}; String mailSubject = "Письмо пользователя приложения APPNAME"; String mailBody = "Здравствуйте. Я хотел (-а) ... "; Intent emailIntent = new Intent(Intent.ACTION_SENDTO); emailIntent.putExtra(Intent.EXTRA_EMAIL, emails); emailIntent.putExtra(Intent.EXTRA_SUBJECT, mailSubject); emailIntent.putExtra(Intent.EXTRA_TEXT, mailBody); emailIntent.setData(Uri.parse("mailto:")); if (emailIntent.resolveActivity(getPackageManager()) != null) { startActivity(emailIntent); Toast.makeText(getApplicationContext(), "Send email.", Toast.LENGTH_SHORT).show(); } else { String err; err = "У Вас отсутствуют установленные приложения с функцией отправки электронных писем"; Toast.makeText(getApplicationContext(), err, Toast.LENGTH_SHORT).show(); } } }); btnItem1_www.setOnClickListener(v -> { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://test.com/")); startActivity(browserIntent); });
Ответы (1 шт):
Для решения этой задачи Вы можете использовать RecyclerView. Хорошая статья по использованию RecyclerView. С помощью свойств POJO моделей (объектов, в которых лежат только данные, без логики) для каждого Item Вы сможете настраивать как уникальную конфигурацию CardView, так и наполнение его данными.