Обоснование
Вы можете пойти с любым из них.
Таким образом, вы можете написать любой файл макета, и вы сможете раздувать его либо в Fragment
, либо * 1006.* или просто как RecyclerView.ViewHolder
это не имеет значения с этой точки зрения (файл макета).
Фрагменты - отличный выбор, потому что:
- Они позволяют легкоповторное использование всего кода, включающего
Fragment
- Они могут быть созданы в отличие от
Activity
;что в основном означает, что вам не нужно проходить через реализацию Parcelable
скороговорки, чтобы передавать сложные объекты между ними (Fragment <-> Fragment || Fragment <-> Activity)
Достаточно было бы Activity
:
Реализация фрагмента действительно хороша, но если вам это просто не нужно, то вы пишете шаблонный код, который не предназначен для реального использования ...не делайте этого: P
Пример кода
Файл макета:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".StackOverflowSample">
<ImageView
android:id="@+id/your_image_view"
android:src="@drawable/ic_launcher_foreground"
android:layout_width="match_parent"
android:layout_height="200dp"
app:layout_constraintTop_toTopOf="parent"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@+id/your_image_view"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Код Котлина:
class StackOverflowSample : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_stack_overflow_sample)
recycler.apply {
adapter = SwitcherAdapter(
arrayOf(
Data("F", R.drawable.froyo, ::onItemClicked),
Data("O", R.drawable.oreo, ::onItemClicked)
)
)
layoutManager = LinearLayoutManager(this@StackOverflowSample)
}
}
fun onItemClicked(data: Data) {
your_image_view.setImageResource(data.resourceDrawable)
}
}
data class Data(val textViewText: String, val resourceDrawable: Int, val callback: ((Data) -> Unit)? = null)
class SwitcherAdapter(val dataset: Array<Data>) : RecyclerView.Adapter<SimpleViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SimpleViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.simple_viewholder_item, parent, false)
return SimpleViewHolder(view)
}
override fun getItemCount(): Int = dataset.size
override fun onBindViewHolder(holder: SimpleViewHolder, position: Int) = holder.bindTo(dataset[position])
}
class SimpleViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView= view.findViewById<TextView>(R.id.text)
fun bindTo(data: Data) {
data.callback?.let { call ->
super.itemView.setOnClickListener { call.invoke(data) }
}
textView.text = data.textViewText
}
}