从非Activity类开始一个新的Activity

时间:2012-09-30 19:44:27

标签: android android-activity

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

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方法中的意图启动新活动,请提供帮助。

由于

4 个答案:

答案 0 :(得分:23)

这不起作用,因为您需要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...
}

然后它会起作用。

答案 1 :(得分:11)

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

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

答案 2 :(得分:0)

使用非活动类中的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"));

答案 3 :(得分:-1)

为了便于使用,您可以为该特定方法指定一个方法:

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);