android-fragments 如何在Kotlin中打开新片段时应用对当前片段的更改?

fae0ux8s  于 2022-11-13  发布在  Android
关注(0)|答案(1)|浏览(200)

我已经设法在片段之间切换,但在当前片段上的更改在进入新片段时不适用。我有2个片段,HomeFragmentSubreddit。当我第一次运行应用程序时,它显示HomeFragment,显示r/aww内容。如果我单击操作栏,它将更改为Subreddit片段。在Subreddit片段中,我可以点击Reddit子分类(如r/sportsr/news等),点击某个subreddit分类后,片段又变成了HomeFragment,应该显示我刚才选择的subreddit分类的内容,但没有,我选择了r/news,而在Subreddit片段中,但是当我运行我的应用程序时,它仍然显示第一个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分类,但事实证明并没有。如何更新分类并应用更改?

nkoocmlb

nkoocmlb1#

我对您的代码片段的理解是,您尝试使用公共MainViewModel在片段和Activity之间进行通信。
您的问题是使用private val viewModel: MainViewModel by viewModels()而不是activityViewModel在片段中创建MainViewModel的新示例
使用以下行获取片段中Activity的viewModel引用

private val viewModel: MainViewModel by activityViewModels()

相关问题