android 在抽象基础 class 中获取 activity 上下文
android get activity context in abstract base class
我正在创建一个抽象基础 class 以将我的导航抽屉代码保存在一个地方,并希望在我的应用程序标题(在工具栏中定义)上实现 onClickListener
以启动我的启动 activity
我正在使用以下代码:
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.toolbar_title:
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
return;
}
}
该应用程序运行正常,但我在某处读到不得使用应用程序上下文启动新活动。但是,android工作室不允许我使用除getApplicationContext
和getBaseContext
之外的任何其他上下文,可能是因为这个class是抽象的。
那我应该使用哪个上下文?
好吧,其中一种方法可以是:您可以在 BaseActivity
class:
中定义一个抽象方法
abstract void launchMainActivity();
并在您的点击侦听器中调用此方法:
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.toolbar_title:
launchMainActivity();
return;
}
}
子classes 可以将此方法实现为:
@Override
void launchMainActivity() {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
看看Context.getApplicationContext()
and ContextWrapper.getBaseContext()
。两者的共同点是在上下文实例上定义。在您的情况下,它甚至是 Activity
.
因此您甚至可以使用 this
作为上下文来启动您的 MainActivity
。这甚至更好,因为对于任何其他上下文类型,您必须包含标志 FLAG_ACTIVITY_NEW_TASK
才能启动新的 activity.
如果使用 this
作为上下文出现错误,那是因为您将 OnClickListener
定义为匿名内部 class,这当然不是上下文。为此,您必须改写 MyBaseActivity.this
。这引用了外部 class 实例。
我正在创建一个抽象基础 class 以将我的导航抽屉代码保存在一个地方,并希望在我的应用程序标题(在工具栏中定义)上实现 onClickListener
以启动我的启动 activity
我正在使用以下代码:
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.toolbar_title:
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
return;
}
}
该应用程序运行正常,但我在某处读到不得使用应用程序上下文启动新活动。但是,android工作室不允许我使用除getApplicationContext
和getBaseContext
之外的任何其他上下文,可能是因为这个class是抽象的。
那我应该使用哪个上下文?
好吧,其中一种方法可以是:您可以在 BaseActivity
class:
abstract void launchMainActivity();
并在您的点击侦听器中调用此方法:
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.toolbar_title:
launchMainActivity();
return;
}
}
子classes 可以将此方法实现为:
@Override
void launchMainActivity() {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
看看Context.getApplicationContext()
and ContextWrapper.getBaseContext()
。两者的共同点是在上下文实例上定义。在您的情况下,它甚至是 Activity
.
因此您甚至可以使用 this
作为上下文来启动您的 MainActivity
。这甚至更好,因为对于任何其他上下文类型,您必须包含标志 FLAG_ACTIVITY_NEW_TASK
才能启动新的 activity.
如果使用 this
作为上下文出现错误,那是因为您将 OnClickListener
定义为匿名内部 class,这当然不是上下文。为此,您必须改写 MyBaseActivity.this
。这引用了外部 class 实例。