Android 让函数返回视图(即RecyclerView、TextView)而不是id来查找该视图(int)是否是一种错误的做法?

Android 让函数返回视图(即RecyclerView、TextView)而不是id来查找该视图(int)是否是一种错误的做法?,android,android-recyclerview,android-view,android-databinding,Android,Android Recyclerview,Android View,Android Databinding,所以我有一个BaseFragment,它建立了一个RecyclerView,还有许多Fragment扩展了这个BaseFragment。我还使用了数据绑定,因此我不必再使用findviewbyd。因此,在我的BaseFragment中,我实现了一个abstract方法,名为: public abstract RecyclerView getRecyclerView() 在子类中,这实现为: @覆盖 公共回收视图getRecyclerView(){ 返回binding.recycleService

所以我有一个
BaseFragment
,它建立了一个
RecyclerView
,还有许多
Fragment
扩展了这个
BaseFragment
。我还使用了
数据绑定
,因此我不必再使用
findviewbyd
。因此,在我的
BaseFragment
中,我实现了一个
abstract
方法,名为:

public abstract RecyclerView getRecyclerView()

在子类中,这实现为:

@覆盖
公共回收视图getRecyclerView(){
返回binding.recycleServiceWLayoutId;
}

此方法仅在超类BaseFragment中使用,如下所示:

setRecyclerView(binding.recyclerViewLayoutId);
getRecyclerView().setLayoutManager(…);
getRecyclerView().addOnScrollListener(…)

onViewCreated()
方法中,这样我就不会忘记自己在30个左右的子类片段中完成它(它们都需要相同的东西)

所以本质上,这与我的一个子类片段类中所做的相同:

mBinding.fragmentSubassRecyclView.setLayoutManager(…);
mBinding.fragmentsRecyclerView.blah(…)


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

否。但这是我的观点


根据我的经验,返回视图而不是id没有什么害处。即使是在练习方面。

一般来说,。这可能会导致您发现并解决一个非常严重的问题

在您的例子中是ok,因为
视图
返回子视图没有错,因为接收子视图引用的类本身已经持有视图引用

但是一个更好的实践是使这些方法受到保护,这样只有扩展类才能使用超类
方法,这样类之外的任何人都无法获得视图引用

最好的做法是创建一个更具体的
,比如
BaseListFragment
,并将
视图
隐藏在
本身中,以便在片段中只能调用如下方法:

setLayoutManager(...);
addOnScrollListener(...);
不公开视图引用。当然,首先必须在片段内部设置视图,如下所示:

setRecyclerView(binding.recyclerViewLayoutId);

你什么意思?“隐藏类本身内部的视图?那么让类实现一些方法setLayoutManager和addOnScrollListener,这样我就不能直接访问视图了?BaseListFragment仍然需要我实现一些方法getRecyclerView,不是吗?因为它仍然是基类,所有扩展它的方法都将具有与调用此方法的RecyclerView不同的ID是和是,您有一个处理列表的基类,对吗?现在,在设计这样的组件时,一般的想法是首先避免将视图引用传递给外部类,以防止内存泄漏。其次,将实现细节隐藏在组件中。第一个是防止错误的关键,第二个是良好体系结构的实践,使您能够在不影响其余代码的情况下切换实现。