gpt4 book ai didi

java - 使用 BaseActivity 摆脱 Activity 和 AppCompatActivity 的委托(delegate)方法

转载 作者:行者123 更新时间:2023-12-01 07:48:18 25 4
gpt4 key购买 nike

我正在创建一个用于处理 android 权限的库 here 。该库当前需要在几乎所有 Activity 中覆盖方法,如下所示:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}

但 Activity 不能扩展同一个类 - 有些可能扩展Activity,其他可能扩展AppCompatActivity(Activity的子类) 但需要支持库)。有些开发人员可能正在使用 AppCompat 库,有些则可能没有。我想包含一个基类,例如 PermissionActivity 和此方法,两种类型的开发人员都可以扩展并且不需要重写。

有什么方法可以让我将此代码包含在库中并且开发人员不需要覆盖它吗?

最佳答案

在创建库时,不要强制开发人员扩展某些类是一件好事。在谈论扩展 Activity 时,这甚至是一个更强大的良好实践,因为有很多库迫使您这样做(因此迫使您在一个或另一个之间进行选择,或者进行一些小修改)。

因此,您应该倾向于组合而不是继承。您可以像这样创建一些委托(delegate)类:

public class PermissionDelegate {

public void onCreate(Bundle savedInstance) {
...
}

public void onStart() {
...
}

// Not quite sure if Context is what you need. Check it out
public void onRequestPermissionsResult(Context? context, int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
Permissions.onRequestPermissionsResult(context, requestCode, permissions, grantResults);
}

并将您的 Activity 中的所有调用委托(delegate)给委托(delegate)人:

public class MyActivity extends Activity {

private PermissionDelegate delegate = new PermissionDelegate();

@Override
public void onCreate(Bundle savedInstance) {
...
delegate.onCreate(savedInstance);
}

@Override
public void onStart() {
...
delegate.onStart();
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
delegate.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}

也适用于AppCompatActivity

public class MyAppCompatActivity extends AppCompatActivity {

private PermissionDelegate delegate = new PermissionDelegate();

@Override
public void onCreate(Bundle savedInstance) {
...
delegate.onCreate(savedInstance);
}

@Override
public void onStart() {
...
delegate.onStart();
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
delegate.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}

通过这种方式,您可以提供继承选项(让您的用户扩展已创建的类)和组合(在您的 Activity 中添加PermissionDelegate)并绑定(bind)其生命周期)

关于java - 使用 BaseActivity 摆脱 Activity 和 AppCompatActivity 的委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45026654/

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