如何访问另一个activity?

How to access another activity?

澄清一下, 不是我想要的。我想访问另一个 Activity 的上下文。

假设我有两个活动,MainActivityWebActivity。在 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();
   }
}

希望这对您有所帮助。

loginlogout 方法中使用 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()