在onStart中启动活动的问题

时间:2010-04-14 15:12:32

标签: android android-activity

我正在尝试从onStart启动浮动活动,以便在初始活动开始时从用户那里检索一些信息。我有以下内容:

@Override
public void onStart(){
 super.onStart();
 callProfileDialog();
}

callProfileDialog()只是:

private void callProfileDialog(){
 Intent i = new Intent(this, com.utility.ProfileDialog.class);
    startActivityForResult(i, PROFDIALOG);
}

ProfileDialog.class从输入框返回一个String。如果返回的结果是RESULT_CANCELED,那么我重新启动活动。

我遇到的问题是,当程序启动时,屏幕只是黑色。如果我点击后退按钮,则会返回RESULT_CANCELED,然后显示初始活动以及浮动活动(因为它在获得RESULT_CANCELED时会自动调用)。为什么我不能通过从onStart()调用ProfileDialog.class来获取活动?当我在onCreate()结束时调用它时得到了相同的结果,这是我切换到使用onStart()的方式。谢谢你的帮助。

编辑:我也尝试了以下内容:

@Override
public void onWindowFocusChanged(boolean hasFocus){
    if(hasFocus)
    callProfileDialog();
}

但这也不起作用。一旦我按下后退按钮,一切正常,但没有这样做,它全是黑色。

3 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,并通过覆盖onAttachedToWindow()来获得我想要的行为。

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    callProfileDialog();
}

答案 1 :(得分:0)

我认为这是因为你还没有有效的背景。尝试其中之一:

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    callProfileDialog();
}

@Override
public void onResume(){
    super.onResume();
    callProfileDialog();
}

答案 2 :(得分:0)

您应该覆盖Activity.onActivityResult()并设置一个您从孩子返回的标志,并且只有在该标志不为真时才启动您的新活动:

public class MyActivity extends Activity {
  boolean returningFromChild = false;
  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    returningFromChild = true;
  }

  @Override
  protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    // Use your main layout here
    setContentView(R.layout.main);
  }

  @Override
  protected void onResume() {
    super.onResume();
    if (!returningFromChild) {
      callProfileDialog();
    }
    returningFromChild = false;
  }
}

// ProfileDialog.java
public class ProfileDialog extends Activity {
  @Override
  protected void onCreate(Bundle icicle) {
    super.onCreate(icicle); 
    // Use your dialog layout here
    setContentView(R.layout.profile_dialog);

    // Use the id of your "OK" button here:
    Button btn = (Button) findViewById(R.id.btnSaveInput);

    btn.setOnClickListener(new View.OnClickListener {
      public void onClick(View v) {
        // XXX: Get / validate the user's input. Can add it to a new Intent object as an Extra, 
        // and use the setResult(RESULT_OK, intent); version:
        setResult(RESULT_OK);
        finish();
      }
    });
  }
}