gpt4 book ai didi

android - 让函数返回一个 View (即 RecyclerView、TextView)而不是 id 来查找该 View (int)是否是一种不好的做法?

转载 作者:行者123 更新时间:2023-11-30 00:02:50 25 4
gpt4 key购买 nike

所以我有一个 BaseFragment 设置了一个 RecyclerView,还有许多 Fragment 扩展了这个 BaseFragment .我还使用了 data-binding,所以我不必再使用 findViewById。所以在我的 BaseFragment 中,我实现了一个 abstract 方法,叫做:

公共(public)抽象 RecyclerView getRecyclerView();

在子类中,这实现为:

@Override
公共(public) RecyclerView getRecyclerView() {
返回 binding.recyclerViewLayoutId;
}

此方法仅在父类(super class) BaseFragment 中使用,如下所示:

getRecyclerView().setLayoutManager(...);
getRecyclerView().addOnScrollListener(...);

onViewCreated() 方法中,所以我不会忘记自己在 30 个左右的子类 Fragments 中执行此操作(它们都需要相同的东西)。

所以本质上,这与在我的一个 Fragment 子类中做的事情是一样的:

mBinding.fragmentSubClassRecyclerView.setLayoutManager(...);
mBinding.fragmentSubClassRecyclerView.blah(...);

这被认为是不好的做法吗?我应该不返回 RecyclerView 本身,而是将 ID 返回给 RecyclerView 的 findViewById 吗?

最佳答案

一般来说,。它会导致你memory leak这是一个需要检测和解决的非常严重的问题。

在你的情况下它是okey,因为返回 subview 的View没有任何问题,因为接收 subview 引用的类已经持有 View 引用本身.

但是更好的做法是让这些方法 protected ,这样只有扩展类才能使用父类(super class)方法,这样就没人能出局了一边类可以获取 View 引用。

最佳做法是创建一个更具体的,例如BaseListFragment,并将View隐藏在里面Class 本身,因此在您的 fragment 中您只能调用如下方法:

setLayoutManager(...);
addOnScrollListener(...);

不公开 View 引用。当然首先你必须像这样在 fragment 中设置 View :

setRecyclerView(binding.recyclerViewLayoutId);

关于android - 让函数返回一个 View (即 RecyclerView、TextView)而不是 id 来查找该 View (int)是否是一种不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49587566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com