如何访问其他活动?

时间:2016-11-15 02:30:42

标签: android android-activity android-fragmentactivity

为了说清楚,this不是我想要的。我想访问另一个Activity的上下文。

假设我有两项活动MainActivityWebActivity。在MainActivity我使用了oAuth2登录,登录后我启动了WebActivity。在WebActivity我需要使用mTencent.logout(MainActivity.this);函数注销,问题是如何从MainActivity访问WebActivity

如果我直接这样做,我会收到错误

  

MainActivity不是封闭类吗?

考虑到我是Android的首发,这可能不是实现它的确切方法。

有人会帮忙吗?谢谢!

API:void com.tencent.tauth.Tencent.logout(Context context)

4 个答案:

答案 0 :(得分:1)

而不是在其他活动中使用一个活动的上下文,有时可能导致崩溃 你可以使用像EventBus这样的库来链接代码。

定义一个实现您想要执行的事件的类,例如:LogOutEvent.java

public static class LogOutEvent { /* Additional fields if needed */ }

您可以使用以下命令从 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 :(得分:1)

您的问题有一个很好的实践解决方案,涉及某些步骤:

1-定义界面:

public interface LogOutInterface {
  public void logout();
}

2-让MainActivity实现此界面:

public class MainActivity extends ???? implements LogOutInterface {
  ...

  @Override
  public void logout(){
    //your logout procedure
  }
}

3-为WebActivity设置公开方法并允许其接受LogOutInterface

public class WebActivity ... {
  private LogOutInterface logoutInterface;
  ...

  public void setLogOut(LogOutInterface logoutInterface) {
     this.logoutInterface = logoutInterface;
  }
}

setLogOut致电MainActivity

public class MainActivity ... {

   public void yourmethod() {
      ...
      webActivity.setLogOut(this);
   }
}

5-来自WebActivity的注销功能:

public class WebActivity ... {
   ... 
   public void yourmethod() {
      logoutInterface.logout();
   }
}

希望这会有所帮助。

答案 2 :(得分:1)

Applicationlogin方法中使用logout上下文。因为它们将在应用程序级别进行管理。

所以将mTencent.logout(MainActivity.this);更改为mTencent.logout(getApplicationContext());

还要将login方法更改为在应用程序上下文中工作。

答案 3 :(得分:0)

这是可行的。 在MainActivity中,public static Activity thisActivity;& thisActivity = this;然后在WebActivity mTencent.logout(MainActivity.thisActivity);

或者只是将logout函数作为MainActivity的公共静态函数,

public static void logout() {
    if (mTencent.isSessionValid()) {
        mTencent.logout(thisActivity);
    }
}

然后从WebActivity调用MainActivity.logout()