如何访问另一个activity?
How to access another activity?
澄清一下, 不是我想要的。我想访问另一个 Activity 的上下文。
假设我有两个活动,MainActivity
和 WebActivity
。在 MainActivity
中,我使用 oAuth2
登录,登录后我启动 WebActivity
。在 WebActivity
中,我需要使用函数 mTencent.logout(MainActivity.this);
注销,问题是如何从 WebActivity
?
访问 MainActivity
如果我直接这样做,我会得到错误,
MainActivity is not an enclosing class?
考虑到我是 android 的初学者,这里可能不是实现它的确切方法。
有人帮忙吗?谢谢!
API : void com.tencent.tauth.Tencent.logout(Context context)
而不是在另一个中使用一个 activity 的上下文,这有时可能会导致崩溃。
你可以使用像 EventBus 这样的库到 link 代码。
定义一个 class 来实现你想要执行的事件 eg:LogOutEvent。java
public static class LogOutEvent { /* Additional fields if needed */ }
您可以 post 事件,例如使用以下命令从 WebViewActivity.java 注销
EventBus.getDefault().post(new LogOutEvent());
并且在 MainActivity 你首先需要注册事件总线
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
然后在 MainActivity 中您可以订阅这样的事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(LogOutEvent event) {/* Do log out here */};
针对您的问题有一个很好的实践解决方案,其中涉及要执行的某些步骤:
1- 定义接口:
public interface LogOutInterface {
public void logout();
}
2- 让你的 MainActivity
实现这个接口:
public class MainActivity extends ???? implements LogOutInterface {
...
@Override
public void logout(){
//your logout procedure
}
}
3- 为您的 WebActivity
设置一个 public 方法并允许它接受 LogOutInterface
:
public class WebActivity ... {
private LogOutInterface logoutInterface;
...
public void setLogOut(LogOutInterface logoutInterface) {
this.logoutInterface = logoutInterface;
}
}
4- 从 MainActivity
:
调用 setLogOut
public class MainActivity ... {
public void yourmethod() {
...
webActivity.setLogOut(this);
}
}
5- 从您的 WebActivity
:
调用注销功能
public class WebActivity ... {
...
public void yourmethod() {
logoutInterface.logout();
}
}
希望这对您有所帮助。
在 login
和 logout
方法中使用 Application
上下文。因为它们将在应用程序级别进行管理。
因此将 mTencent.logout(MainActivity.this);
更改为 mTencent.logout(getApplicationContext());
。
同时更改您的 login
方法以在应用程序上下文中工作。
这是可行的。
在 MainActivity 中,public static Activity thisActivity;
& thisActivity = this;
然后在 WebActivity 中 mTencent.logout(MainActivity.thisActivity);
或者可以将注销函数作为 public MainActivity 的静态函数,
public static void logout() {
if (mTencent.isSessionValid()) {
mTencent.logout(thisActivity);
}
}
然后从 WebActivity 调用 MainActivity.logout()
。
澄清一下,
假设我有两个活动,MainActivity
和 WebActivity
。在 MainActivity
中,我使用 oAuth2
登录,登录后我启动 WebActivity
。在 WebActivity
中,我需要使用函数 mTencent.logout(MainActivity.this);
注销,问题是如何从 WebActivity
?
MainActivity
如果我直接这样做,我会得到错误,
MainActivity is not an enclosing class?
考虑到我是 android 的初学者,这里可能不是实现它的确切方法。
有人帮忙吗?谢谢!
API : void com.tencent.tauth.Tencent.logout(Context context)
而不是在另一个中使用一个 activity 的上下文,这有时可能会导致崩溃。
你可以使用像 EventBus 这样的库到 link 代码。
定义一个 class 来实现你想要执行的事件 eg:LogOutEvent。java
public static class LogOutEvent { /* Additional fields if needed */ }
您可以 post 事件,例如使用以下命令从 WebViewActivity.java 注销
EventBus.getDefault().post(new LogOutEvent());
并且在 MainActivity 你首先需要注册事件总线
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
然后在 MainActivity 中您可以订阅这样的事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(LogOutEvent event) {/* Do log out here */};
针对您的问题有一个很好的实践解决方案,其中涉及要执行的某些步骤:
1- 定义接口:
public interface LogOutInterface {
public void logout();
}
2- 让你的 MainActivity
实现这个接口:
public class MainActivity extends ???? implements LogOutInterface {
...
@Override
public void logout(){
//your logout procedure
}
}
3- 为您的 WebActivity
设置一个 public 方法并允许它接受 LogOutInterface
:
public class WebActivity ... {
private LogOutInterface logoutInterface;
...
public void setLogOut(LogOutInterface logoutInterface) {
this.logoutInterface = logoutInterface;
}
}
4- 从 MainActivity
:
setLogOut
public class MainActivity ... {
public void yourmethod() {
...
webActivity.setLogOut(this);
}
}
5- 从您的 WebActivity
:
public class WebActivity ... {
...
public void yourmethod() {
logoutInterface.logout();
}
}
希望这对您有所帮助。
在 login
和 logout
方法中使用 Application
上下文。因为它们将在应用程序级别进行管理。
因此将 mTencent.logout(MainActivity.this);
更改为 mTencent.logout(getApplicationContext());
。
同时更改您的 login
方法以在应用程序上下文中工作。
这是可行的。
在 MainActivity 中,public static Activity thisActivity;
& thisActivity = this;
然后在 WebActivity 中 mTencent.logout(MainActivity.thisActivity);
或者可以将注销函数作为 public MainActivity 的静态函数,
public static void logout() {
if (mTencent.isSessionValid()) {
mTencent.logout(thisActivity);
}
}
然后从 WebActivity 调用 MainActivity.logout()
。