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是和是,您有一个处理列表的基类,对吗?现在,在设计这样的组件时,一般的想法是首先避免将视图引用传递给外部类,以防止内存泄漏。其次,将实现细节隐藏在组件中。第一个是防止错误的关键,第二个是良好体系结构的实践,使您能够在不影响其余代码的情况下切换实现。