如何通过不同类型的活动

时间:2018-06-19 13:06:49

标签: android kotlin

我的班级Activity1扩展了AppCompatActivity,班级Activity2扩展了AppCompatActivity。我想在两个活动中调用相同的方法:

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

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

当然,像这样的东西行不通,是否可以使用Bundle或其他东西?我只想拥有一些通用方法,可以在其中传递不同的activities,然后再调用它们的方法。

2 个答案:

答案 0 :(得分:0)

如果您要查找两个独立的,不相关的类以声明相同的方法,那么您要寻找的是interface。使用以下示例界面:

public interface MyInterface {
    void method(AppCompatActivity 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 
    }
}

同样,您可以然后将另一个类中的任何一个活动引用为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 
    }
}

答案 1 :(得分:0)

尝试传递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作为方法参数传递。