首页 > 解决方案 > 在 Android 的一项活动中,两个回收站视图之间共享价值

问题描述

如何在两个 RecyclerView 之间共享价值?那是在一个活动中吗?下面是我的代码,只有一个 RecyclerView 绑定。没关系,我理解它是如何工作的。我想在同一页面中添加另一个 RecyclerView。两个 RecyclerView 都是表。当用户单击第一个 RecyclerView 中的项目时,第二个 RecyclerView 中的任何内容都发生了变化。Repository 通常从 Room 数据库返回数据列表。我欣赏的是一些代码示例,或者可能是一些带有示例的教程。

这是 MainActivity.kt

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    private val oneViewModel: OneViewModel by viewModels()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityMaindBinding.inflate(layoutInflater)
        setContentView(binding.root)
        val recyclerViewOneAdapter = RecyclerViewOneAdapter ()
        binding.apply {
            recyclerViewOneAdapter.apply {
                adapter = Adapter
                layoutManager = LinearLayoutManager(this@MainActivity)
            }
            oneViewModel.getItems.observe(this@MainActivity){
                adapter.submitList(it)
            }
         }
    }
}

这是 ViewModel 示例


@HiltViewModel
class OneViewModel @Inject constructor(
    repository: SybaseRepository
): ViewModel(){
    val getItems = repository.getAllItemsFromDatabase().asLiveData()    
}

我的建议是这样的:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    private val oneViewModel: OneViewModel by viewModels()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityMaindBinding.inflate(layoutInflater)
        setContentView(binding.root)
        val recyclerViewOneAdapter = RecyclerViewOneAdapter ()
        val recyclerViewSecondAdapter = RecyclerViewSecondAdapter()
        binding.apply {
            recyclerViewOneAdapter.apply {
                adapter = recyclerViewOneAdapter 
                layoutManager = LinearLayoutManager(this@MainActivity)
            }
            oneViewModel.getFirstItems.observe(this@MainActivity){
                adapter.submitList(it)
            }
                recyclerViewTwoAdapter.apply {
                adapter = recyclerViewSecondAdapter 
                layoutManager = LinearLayoutManager(this@MainActivity)
            }
            oneViewModel.getSecondItems.observe(this@MainActivity){
                adapter.submitList(it)
            }
         }
    }
}

这是 ViewModel 示例


@HiltViewModel
class OneViewModel @Inject constructor(
    repository: SybaseRepository
): ViewModel(){
    val getFirstItems = repository.getFirsttemsFromDatabase().asLiveData()  
    val getSecondItems = repository.getSecondItemsFromDatabase().asLiveData()    
}

我错过了什么吗?还是正确的方法?

标签: androidkotlinmvvmandroid-recyclerview

解决方案


推荐阅读