我已经设法在片段之间切换,但在输入新片段时,当前片段上的更改不适用.我有两个片段,HomeFragmentSubreddit.当我第一次运行这个应用程序时,它显示HomeFragment,即显示r/aww个内容.如果我点击操作栏,它会变成subreddit片段.在Subreddit片段中,我可以单击子reddit类别(例如r/sportsr/news等).在我点击子reddit类别后,片段再次变为HomeFragment,它应该显示我刚刚 Select 的subreddit类别的内容,但它没有.我在Subreddit片段中 Select 了r/news,但当我运行我的应用程序时,它仍然显示第一个子reddit类别,即r/aww.

这是我的SubredditListAdapter.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类别,但事实证明并非如此.如何更新类别并应用更改?

推荐答案

我对您的代码片段的理解是,您正在try 使用公共的MainViewModel在您的片段和活动之间进行通信.

您的问题是,您正在使用private val viewModel: MainViewModel by viewModels()而不是activityViewModel在片段中创建MainViewModel的新实例

使用以下代码行在片段中获取活动的viewModel引用

private val viewModel: MainViewModel by activityViewModels()

Android相关问答推荐

如何使用单个代码库使用不同的firebase项目创建多个应用程序ID apk

如何检测HitTest是否命中给定的网格对象?

无法在Android Gradle中同步Chaquopy版本

如何将两个变量传递给Nav主机,然后将其传递给另一个屏幕?

Android可绘制边框删除底线

Android 11:在try 获取文件的永久权限后,仍然没有读写权限

为什么柱子的高度不都一样?

如何从URI中获取图像大小

如何判断堆肥是否为空?

如何将 Room Persistence 依赖项正确添加到我的 Jetack Compose Android 应用程序

使用lazyColumn迁移paging3的旧代码

在 kotlin 协同 routine 中,如何将数据范围限定为请求路径(以 MDC 为例)?

是否可以在 Android 应用程序的 Wifi 设置中为 DNS 服务器设置自定义 IP?

通过 setIntentScanningStrategyEnabled(true) 未检测到信标的 Android Beacon 库后台扫描

Jetpack Compose UI - 在 AlertDialog 中单击时按钮宽度会发生变化

Jetpack 组合千位分隔符视觉转换,也适用于小数

我的观点在jetpack compose中相互重叠

在 Android Studio 中替换字符串中的 "

如何在 Compose 中更改高程 colored颜色 ?

我的自定义视图没有显示我应该如何修复它?