从基类获取当前活动名称[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从基类获取当前活动名称[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

如何获取基类中当前活动的名称。假设我有一个基本活动类BaseActivity:

class BaseActivity extends AppCompatActivity
{
    ...
    String getCurrentActivityName() {
            ....
    }
    ...
}

现在我有2个其他课程

class Activity1 extends BaseActivity
{
    ....
}

class Activity2 extends BaseActivity
{
    ....
}

可能还有更多的活动扩展了BaseActivity,为简洁起见,我在这里使用了2。

我不知道如何在基类中实现getCurrentActivityName()方法。它应该返回一个包含当前活动名称的String。

编辑:由于某些原因,我无法编辑Activity1和Activity2。

答案

在创建新的活动类时,您应该将类​​名添加到构造函数中,然后在尝试时使用getCurrentActivityName方法

class BaseActivity extends AppCompatActivity
    {
        protected String className;
        public BaseActivity() { this.className = "BaseActivity"; }
        String getCurrentActivityName() {
              return this.className;
        }
        ...
    }

    class Activity1 extends BaseActivity
    {
        protected String className;
        public Activity1() { this.className = "Activity1"; }
    }

    class Activity2 extends BaseActivity
    {   
        protected String className;
        public Activity2() { this.className = "Activity2"; }

    }

然后,如果你打电话

BaseActivity baseActivity = new BaseActivity();
baseActivity.getClassname(); // returns "BaseActivity"
Activity1 activity1 = new Activity1();
activity1.getClassname(); // returns "Activity1"

或者,如果您只想知道当前活动名称的使用情况。就这么简单

this.getClass().getSimpleName()
另一答案

显然这很好用,我很惊讶我之前标记的as already having an answer在接受的回复中没有提到这个问题。

abstract class A {
    public final String getName() {
         return this.getClass().getName();
    }
}

class B extends A { }

class C extends A { }

这将打印实现实例的当前class名称

public static void main(String[] args) {

    B b = new B();
    C c = new C();

    System.out.println(b.getName());
    System.out.println(c.getName());
}

输出:

com.test.B
com.test.C

您可以根据用例进行调整。

另一答案
public class BaseActivity extends AppCompatActivity {
    ActivityType currentActivityType;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    String getCurrentActivityName(){
        switch (this.currentActivityType){
            case type1:
                return "Activity 1";
            case type2:
                return "Activity 2";
                default:
                    return "Base Activity";
        }

    }
}

enum ActivityType{
    type1,
    type2
}

public class FirstActivity extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        currentActivityType = ActivityType.type1;
    }
}

public class SecondActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        currentActivityType = ActivityType.type2;
    }

}
另一答案

getActivityName()中创建抽象方法BaseActivity

在每个活动中实施getActivityName()并返回Activity.this.getClass().getSimpleName();

加上这个

String getCurrentActivityName() {
    return getActivityName();
}

以上是关于从基类获取当前活动名称[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Android 6.0:获取当前活动的包名称[重复]

从基类c ++的向量中的派生类调用虚拟方法[重复]

如何从基类中获取派生类名

如何从基类向量中获取派生类变量?

如何从基类实例中找出子类?

获取使用StructureMap从基类继承的唯一类型实例