如何获取基类中当前活动的名称。 假设我有一个基本活动类BaseActivity:
class BaseActivity extends AppCompatActivity
{
...
String getCurrentActivityName() {
....
}
...
}
现在我有另外两个班级
class Activity1 extends BaseActivity
{
....
}
class Activity2 extends BaseActivity
{
....
}
可能还有更多活动扩展了BaseActivity,为简洁起见,我在这里使用了2。
我不确定如何在基类中实现getCurrentActivityName()方法。它应该返回一个包含当前活动名称的String。
编辑:由于某些原因,我无法编辑Activity1和Activity2。
答案 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;
}
}