Android 视图绑定与基类中的某些视图

Android View Binding with some Views in Base Classes

提问人:Kenny Wyland 提问时间:8/29/2023 更新时间:8/29/2023 访问量:19

问:

我正在将现有应用程序从旧应用程序迁移到视图绑定。我的片段广泛使用继承,通用视图存储在继承层次结构中的各种片段中。例如。。。findViewById()

class OverPaidQuotaBillingIssueFragment<FragmentOverPaidQuotaBinding> extends FixBillingIssueFragment {
    Button upgradeButton;
    
    @NonNull
    @Override
    FragmentOverPaidQuotaBinding createviewbinding() {
        return FragmentOverPaidQuotaBinding.inflate(getLayoutInflater());
    }
}

abstract class FixBillingIssueFragment<VB extends ViewBinding> extends BaseFragment {
    TextView explanationTextView;   
}

abstract class BaseFragment<VB extends ViewBinding> extends Fragment {
    VB binding;
    ProgressBar spinner;
    
    abstract @NonNull VB createviewbinding();
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        this.binding = createviewbinding();
        return this.binding.getRoot();
    }
}

由于整个应用程序中的大量片段都需要进度条,因此我在 BaseFragment 中定义了它,并且它由 BaseFragment 代码自动控制,适用于许多常见情况。

同样,所有基于 FixBillingIssueFragment 的屏幕都至少具有一个 TextView,其中包含对错误原因的解释。

然后,顶级类 OverPaidQuotaBillingIssueFragment 将具有特定的 UI 元素来处理这种情况,例如升级按钮。

我已经整理了一个安排,以便我可以在 BaseFragment 中定义绑定并尝试尽可能多地减少样板,但我的问题出在 和 .FixBillingIssueFragmentBaseFragment

FixBillingIssueFragment并且需要能够与他们的 和 进行交互,但他们都不知道他们的 ViewBinding 类的真正类型是什么,所以他们不知道它包含这些字段。BaseFragmentexplanationTextViewspinner

由于我的布局的性质和我们正在讨论的视图类型,我不能只是将通用布局项分离到单独的文件中,以便单独膨胀它们。

我真的不想让顶级类 () 必须捕获其父类的视图引用,因为这样每个顶级类都必须具有捕获该视图引用的重复代码才能将其存储在父类中。OverPaidQuotaBillingIssueFragment

但是我能想到的唯一另一种选择是让抽象父类通过调用来捕获它想要的引用,这似乎真的像我正在编写大量代码来替换,只是不得不求助于仍然使用 .findViewById()findViewById()findViewById()

我是否缺少其他选项?任何建议都是值得赞赏的。

java 继承 android-viewbinding

评论


答: 暂无答案