从基类获取当前活动名称[重复]
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();
}
以上是关于从基类获取当前活动名称[重复]的主要内容,如果未能解决你的问题,请参考以下文章