Проблемы с запуском активности в onStart - PullRequest
0 голосов
/ 14 апреля 2010

Я пытаюсь запустить плавающее действие из 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 возвращает строку из поля ввода. Если возвращенный результат - RESULT_CANCELED, тогда я перезапускаю действие.

Проблема у меня в том, что при запуске программы экран просто черный. Если я нажимаю кнопку «Назад», возвращается RESULT_CANCELED, тогда показывается начальная активность, а также плавающая активность (поскольку она вызвала себя, когда получила RESULT_CANCELED). Почему я не могу получить показ мероприятий, позвонив по номеру ProfileDialog.class из onStart ()? Я получил тот же результат, когда я вызвал его в конце onCreate (), и именно поэтому я переключаюсь на использование onStart (). Спасибо за помощь.

Редактировать: я также пробовал следующее:

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

Но это тоже не работает. Все работает нормально, как только я нажимаю кнопку «Назад», но без этого все становится черным.

Ответы [ 3 ]

2 голосов
/ 10 июня 2010

У меня была похожая проблема, и я получил желаемое поведение, переопределив onAttachedToWindow ().

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    callProfileDialog();
}
0 голосов
/ 15 апреля 2010

Вы должны переопределить 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();
      }
    });
  }
}
0 голосов
/ 14 апреля 2010

Я думаю, это потому, что у вас еще нет действительного контекста. Попробуйте один из них:

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

или

@Override
public void onResume(){
    super.onResume();
    callProfileDialog();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...