从基类

时间:2018-03-05 09:34:51

标签: android android-activity

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

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

现在我有另外两个班级

class Activity1 extends BaseActivity
{
    ....
}

class Activity2 extends BaseActivity
{
    ....
}

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

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

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

4 个答案:

答案 0 :(得分:1)

创建新的活动类时,您应该将类​​名添加到构造函数中,然后在尝试时使用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()

答案 1 :(得分:1)

显然这种方法很好,我很惊讶我之前标记为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

您可以根据自己的使用情况进行调整。

答案 2 :(得分:0)

getActivityName()中创建抽象方法BaseActivity

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

添加此

String getCurrentActivityName() {
    return getActivityName();
}

答案 3 :(得分:0)

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;
    }

}