android - 在 Kotlin 中打开新 fragment 时如何对当前 fragment 应用更改?

标签 android android-fragments android-adapter android-livedata android-viewmodel

我已经设法在 fragment 之间切换,但是在输入新 fragment 时,当前 fragment 的更改没有应用。我有 2 个 fragment ,HomeFragmentSublisting。当我第一次运行该应用程序时,它显示 HomeFragment,其中显示了 football 内容。如果我点击操作栏,它会变成 Subreddit fragment 。在 Sublisting fragment 中,我可以点击 subreddit 类别(例如 basketballtennis 等)。在我点击一个 subreddit 类别后, fragment 再次变为 HomeFragment,它应该显示我刚刚选择的 subreddit 类别的内容,但它没有。我在 Sublisting fragment 中选择了 tennis,但是当我运行我的应用程序时它仍然显示第一个 subreddit 类别,即 football

这是我的SublistingListAdapter.kt

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH {
    val binding = RowSubredditBinding.inflate(LayoutInflater.from(parent.context),
        parent, false)
    val holder = VH(binding)
    
    return holder
}

这是我的HomeFragment.kt:

class HomeFragment: Fragment() {
    private val viewModel: MainViewModel by viewModels()
    private var _binding: FragmentRvBinding? = null
    private val binding get() = _binding!!

    companion object {
        fun newInstance(): HomeFragment {
            return HomeFragment()
        }
    }
   
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentRvBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        Log.d(javaClass.simpleName, "onViewCreated")

        initAdapter(binding)
    }
}

我认为通过使用 updateNewCategoryobserveNewCategory 会改变 subreddit 类别,但事实证明它没有。如何更新类别并应用更改?

最佳答案

我对您的代码 fragment 的理解是,您正在尝试使用通用的 MainViewModel 在您的 fragment 和 Activity 之间进行通信。

您的问题是,您正在通过使用 private val viewModel: MainViewModel by viewModels() 而不是使用 activityViewModel

在 fragment 中创建 MainViewModel 的新实例

使用以下行获取 fragment 中 Activity 的 viewModel 引用

private val viewModel: MainViewModel by activityViewModels()

关于android - 在 Kotlin 中打开新 fragment 时如何对当前 fragment 应用更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74113898/

相关文章:

android - 使用Flutter/Dart构建的应用程序空间

android - 为什么 FragmentPagerAdapter saveState 总是空的?

android - 如何使用Viewpager和Fragment分割窗口?

android - 屏幕旋转 fragment

android - Activity 之上的 Fragment

android - SQLite 数据库是否计入应用程序的内存限制?

android - 仅当 getItemCount 返回大于数组大小时 1 时才调用 OnBindView

java - Recyclerview 适配器内的 Viewpager

java - 无法转换为上下文

Android ListView 自定义适配器