Я не уверен в теории развития Kotlin и Android (все еще новичок). У меня есть фрагмент с простым элементом хранения счета к нему. Он отображает счет и есть кнопка + & -, чтобы повлиять на счет. Ниже приведен фрагмент кода:
ScoreKeepingBasicFragment.kt
class ScoreKeepingBasicFragment : Fragment() {
companion object {
fun newInstance() =
ScoreKeepingBasicFragment()
}
private lateinit var binding: ScoreKeepingBasicFragmentBinding
private val viewModel by viewModels<ScoreKeepingBasicViewModel> {
ScoreKeepingBasicViewModelFactory()
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(
inflater,
R.layout.score_keeping_basic_fragment,
container,
false
)
binding.lifecycleOwner = this
binding.viewModel = viewModel
return binding.root
}
}
ScoreKeepingBasicViewModel.kt
class ScoreKeepingBasicViewModelFactory : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return modelClass.getConstructor().newInstance()
}
}
class ScoreKeepingBasicViewModel : ViewModel() {
var scoreText = MutableLiveData<String>("0")
private var scoreInt: Int = 0
fun addScore(){
println("ADD")
scoreInt++
scoreText.value = "$scoreInt"
}
fun minusScore(){
println("Minus")
scoreInt--
scoreText.value = "$scoreInt"
}
}
score_keeping_basic_fragment. xml
<layout>
<data>
<variable
name="viewModel"
type="com.michaelcodesthings.scorekeeper.viewmodel.ScoreKeepingBasicViewModel" />
</data>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/minus_layout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal"
android:onClick="@{()->viewModel.minusScore()}">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
android:background="@drawable/left_rectangle"
android:src="@drawable/ic_remove"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:orientation="horizontal">
<TextView
android:id="@+id/score_list_item"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginVertical="8dp"
android:background="@drawable/center_rectangle"
android:gravity="center"
android:text="@{viewModel.scoreText}"
android:textAlignment="center"
android:textSize="30sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/add_layout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal"
android:onClick="@{()->viewModel.addScore()}">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/right_rectangle"
android:src="@drawable/ic_add"
android:layout_margin="8dp"/>
</LinearLayout>
</LinearLayout>
</layout>
Теперь этот фрагмент работает именно так, как я хочу, добавляя и убирая из оценки. И отлично работает, если бы я использовал тег «include» в другом фрагменте или деятельности.
Но теперь я заблудился о том, как работает Kotlin / Android Dev. Я хочу иметь список этих фрагментов на экране, пользователь может нажать кнопку «Добавить оценку», и еще один из них будет добавлен в список, поэтому будет динамически добавлять оценки в представление списка. Каждый элемент в списке нуждается в своем собственном состоянии и работает независимо от остальных. Ниже приведена диаграмма примерно того, как я хочу, чтобы она выглядела.
Я провел некоторый поиск, но читал, что вы не можете добавлять фрагменты в представления списка, но, похоже, не нашли решения для моего проблема. Любые идеи о том, как решить эту проблему?
Любая помощь в том, как работает лог c, будет принята с благодарностью. Заранее благодарим за любую помощь.
![Diagram on roughly how I want it to look](https://i.stack.imgur.com/HnDSY.png)
![Score Fragment](https://i.stack.imgur.com/K3NWF.png)