如何在单击当前片段中的不同内容时启动具有不同内容的单个片段

问题描述 投票:0回答:1

我是 Android 新手。我知道现在最好使用 Jetpack compose,但我想首先开始学习旧的做事方式。

我有一个主页,其中有一个片段显示一些可供选择的汽车,一个简单的 XML,其中只有两个用于汽车名称和描述的文本字段,以及一个用于汽车图像的图像视图。

我有一个该片段的视图模型,其中包含汽车列表的可变实时数据和汽车列表的实时数据。 (汽车只是一个具有名称、描述和图像作为成员的对象)。 init 只会随机填充汽车列表的可变实时数据的一些名称、描述和图像。然后设置适配器

我还有一个适配器,用于创建视图模型,填充两个文本字段和图像视图(如果视图模型中有数据)。

fragment 的 onCreateView 会膨胀视图,设置一个新的适配器,并观察视图模型中是否有数据,以便适配器知道填充这些内容。

到目前为止,我可以显示一页随机的汽车图像、名称和描述。我的下一步是尝试在选择汽车的名称/图像时打开一个新片段,该片段显示其具体细节,但片段的内容会根据我选择的汽车而有所不同。我不确定执行此操作的步骤是什么以及在哪里执行。

谢谢如果有人可以帮忙,我知道这有点长。 TYTYTYTYTY

android kotlin android-fragments
1个回答
0
投票

我认为如果我在这里发布一些代码的逻辑可能会有所帮助。其中一些我只会做部分伪代码 所以我原来的片段和适配器看起来像这样

汽车适配器:

class CarsAdapter(private var cars: List<Car>): RecyclerView.Adapter<...> {
    
    override fun onBindViewHolder(p0: ViewHolder, p1: Int) {
        val car = cars[p1]
        // set the names, descriptions, and images
    }
    ...
    ...

    fun populateCars(cars: List<Car>) {
        this.cars = cars
        notifyDataSetChanged()
    }
}

汽车碎片:

class CarsFragments: Fragment() {
    private lateinit var carsAdapter: CarsAdatper
    private lateinit recyclerView: RecyclerView
    private val carsViewModel = CarsViewModel()

    override fun onCreateView(....) {
        val view = ....
        ...
        ...
        carsAdapter = CarsAdapter(emptyList())
        recyclerView.apply {
            ...
            ...
            adapter = carsAdapter
        }

        carsViewModel.cars.observe(viewLifecycleOwner) {
            if (it.isNotEmpty()) {
                carsAdapter.populateCars(it)
            }
        }
    }

}

汽车视图模型:

class CarsViewModel: ViewModel() {
    private mutableList = MutableLiveData<List<Car>>()
    private cars = LiveData<List<Car>> = mutableList

    init {
        randomCars()
    }

    private fun randomCars() {
        // just randomly add some cars
        // then mutableList.postValue()
    }

}

现在我尝试创建DetailsFragment和DetailsAdapter,就像CarsFragment和CarsAdapter一样。 DetailsAdapter 中只有

onCreateViewHolder
onBindViewHolder
,DetailsFragment 中也只有
onCreate
onCreateView
。但随后我不确定如何以及在哪里添加用于单击原始片段中的特定名称/图像的功能以触发这些新片段和适配器打开...

© www.soinside.com 2019 - 2024. All rights reserved.