【问题标题】:Start a new Activity from non Activity class从非 Activity 类开始一个新的 Activity
【发布时间】:2021-05-12 13:27:10
【问题描述】:

我想在实现 DialogListener 的非 Activity 类中启动一个新活动,以下是我的代码:

public class FacebookLoginDialog implements DialogListener {
  @Override
  public void onComplete(Bundle values) {
    HomeActivity.showInLog(values.toString());

    Intent i1 = new Intent (this, SearchActivity.class);
    startActivity(i1);
  }

  @Override
  public void onFacebookError(FacebookError e) {
    // TODO Auto-generated method stub
  }

  @Override
  public void onError(DialogError e) {
    // TODO Auto-generated method stub
  }

  @Override
  public void onCancel() {
    // TODO Auto-generated method stub
  }
}

我无法在onComplete 方法中使用意图启动新活动,请帮助。

谢谢

【问题讨论】:

  • 尝试将“this”更改为 getApplicationContext(),或从活动中传递上下文
  • 请注意,我想在登录成功后开始活动,这就是我在 onComplete 方法中开始活动的原因
  • 我已将其更改为 getApplicationContext(),但它无法解决我的问题。你能告诉我应该如何从活动中传递上下文吗? SearchActivity 是我要开始的活动

标签: android android-activity


【解决方案1】:

这不起作用,因为您需要Context 才能开始新活动。你可以将你的类重新组织成这样:

public class FacebookLoginDialog implements DialogListener {
  private final Context context;

  public FacebookLoginDialog(Context context) {
    this.context = context;
  }

  @Override
  public void onComplete(Bundle values) {
    HomeActivity.showInLog(values.toString());

    Intent i1 = new Intent (context, SearchActivity.class);
    context.startActivity(i1);
  }

  //Other methods...
}

然后就可以了。

【讨论】:

  • 我会担心构造函数中的上下文来自哪里。 (Activity).getContext() 不是更好吗?
  • @Simon 没有Activity.getContext() 方法,活动已经是一个上下文。
  • 嗯。工作 13 小时,晚餐喝太多酒。我知道我的意思,这既错误又使事情复杂化,表达不正确。是时候结束一晚了......
  • 嗨,马尔科姆,我也试过这个,但它在 Intent i1 = new Intent (this, SearchActivity.class);.
  • 我确信它确实会起作用,但现在我在登录时遇到错误。所以可以告诉你这是 100% 有效的。无论如何,非常感谢
【解决方案2】:

将上下文作为构造函数参数传递,然后试试这个

Intent i = new Intent(this, SearchActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

【讨论】:

  • 它适用于三星 s4 但不适用于 Galaxy Note 2 !!任何建议
【解决方案3】:

使用非活动类的starActivity:

Intent intent = new Intent(android.content.Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_TEXT, "YOUR STRING");
        intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Share via...");
        context.startActivity(Intent.createChooser(intent, "Share"));

【讨论】:

    【解决方案4】:

    为了便于使用,您可以为这个特定方法提供一个方法:

    public class Something
    {
       public static void navigate(Context context,  Class<?> nameOfClass)
        {
            Intent i = new Intent(context, nameOfClass);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }
    

    每次都可以在其他类和方法中调用:

    Something.navigate(activityName.this, classYourWantTONavigateTo.class);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 2017-12-28
      相关资源
      最近更新 更多