kotlin 如何通过不同类型的活动

5vf7fwbs  于 2023-04-07  发布在  Kotlin
关注(0)|答案(2)|浏览(177)

我有类Activity1扩展AppCompatActivity和类Activity2扩展AppCompatActivity。我想在两个活动中调用相同的方法:

method(Activity1.this)   - parameter (Activity1 activity)

method(Activity2.this)   - parameter (Activity2 activity)

当然,这样的东西不起作用,有没有可能使用Bundle或其他东西?我只是想有一个通用的方法,我可以传递不同的活动,然后调用它们的方法。

7fyelxc5

7fyelxc51#

尝试传递Activity对象引用不是一个好主意。

  • 如果假设方法是特定于Activity的,那么您可以简单地创建一个BaseActivity(扩展AppCompatActivity)并使Activity1Activity2扩展BaseActivity
    BaseActivity.java
class BaseActivity : AppCompatActivity() {
   ...
   fun commonMethod(){
       ...
   }
}

Activity1.java

class Activity1 : BaseActivity() {
   ...
   //use commonMethod() where ever needed.
}

Activity2.java

class Activity2 : BaseActivity()  {
   ...
   //use commonMethod() where ever needed.
}
  • 如果目标方法是一个实用方法,那么你应该创建一个单独的Utility类,并将该方法作为静态方法。如果需要,你可以将Context Obj作为方法参数传递。
dl5txlt9

dl5txlt92#

如果你正在寻找两个独立的、不相关的类,并声明了相同的方法,那么interface就是你要找的。以下面的接口为例:

public interface MyInterface {
    void method(AppCompatActivity activity);
}

你的两个Activity现在都可以implement这个接口,并将它们自己作为参数传递给extend AppCompatActivity

public Activity1 extends AppCompatActivity implements MyInterface {

    @Override
    public void onResume(Bundle savedInstanceState) {
         super(savedInstanceState);
         method(this);
    }

    @Override
    public void method(AppCompatActivity activity) {
         // Definition goes here 
    }
}

同样地,您可以从另一个类引用您的Activity作为MyInterface的示例,例如。

// Not an actual way of declaring an Activity but just for demonstration purposes
MyInterface activity1 = new Activity1();
MyInterface activity1 = new Activity2();

因为你的两个类都扩展了AppCompatActivity,所以Sagar's answer在这个示例中也同样可以工作。但是,这个解决方案将不考虑继承路径。

编辑抱歉,我刚刚才注意到[Kotlin]标签,在问题中并不清楚。Kotlin的等效值是:

public Activity1 : AppCompatActivity(), MyInterface {
    override fun onResume(savedInstanceState: Bundle) {
         super(savedInstanceState);
         method(this);
    }

    override fun method(activity: AppCompatActivity) {
         // Definition goes here 
    }
}

相关问题