2012-06-28 3 views
0

Я следую этому руководству http://www.vogella.com/articles/AndroidIntent/article.html за то, что некоторые данные переданы родительской активности, вызвав действие с помощью startActivityForResult.onActivityResult data transfer

В основном я пытаюсь закончить родительскую активность, на некоторых нажатых кнопках, но не на BackPressed. Я не знаю, есть ли более простой способ или нет. Как это:

MainPage to NewTarget 
      NewTarget to Target 

// onBackPressed 
      Target to NewTarget 

// onButtonClick on TargetActivity 
      Target to MainPage 

Проблема заключается в onActivityResult вызовов, когда я нажимаю кнопку на активности NewTarget, а не на целевой финише деятельности ?? Разве это не должно быть наоборот?

В классе «NewTarget» у меня есть кнопка, которая должна вызывать активность onClick. И мне также нужна некоторая функция feedBack, названная «Target», например, она была завершена кнопкой «Назад» или каким-либо другим способом (мне нужно закончить эту операцию на определенный момент щелчка, и я назвал «finish()»)

от NewTarget деятельности:

public void savingClick(View v) { 
    Intent targetIntent = new Intent(this, Target.class); 
    targetIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivityForResult(targetIntent, 5); 
} 

о целевой деятельности:

@Override 
public void finish() { 
if(ClickCheck) { 
    Log.d("Target","ClickCheck"); 
    // Prepare data intent 
    Intent data = new Intent(); 
    data.putExtra("returnKey", "click"); 
    // Activity finished ok, return the data 
    setResult(RESULT_OK, data); 
} 
super.finish(); 

}

И, наконец, на активность NewTarget:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.d("NewTarget","requestCode: " + requestCode); 
    Log.d("NewTarget","resultCode: " + resultCode); 
    if(requestCode == 5 && resultCode == RESULT_OK) { 
     Log.d("NewTarget","data: " + data.hasExtra("returnKey")); 
     if(data.hasExtra("returnKey")) 
      this.finish(); 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

И я проверить значения:

// these lines have appeared when i clicked on button to startActivityForResult 
requestCode: 5 
resultCode: 5 
// ClickCheck line has appeared on Target activity finished. 
// data: data.hasExtra("returnKey")); line has never been appeared. 

Так в чем же дело? Что я пропускаю? Заранее благодарим за помощь.

+0

Что вы хотите достичь, не могли бы вы рассказать в простых – rajpara

+0

Я отредактировал свой вопрос с помощью схематического объяснения. – yahya

ответ

1

Для этого:

MainPage to NewTarget 
     NewTarget to Target 

// onBackPressed 
     Target to NewTarget 

// onButtonClick on TargetActivity 
     Target to MainPage 

Вам не нужно использовать startActivityForResult(), если вам нужно иметь некоторые данные, возвращаемые из Target в NewTarget. Обычное поведение будет заключаться в том, что нажатие «назад» в Target просто вызовет finish() на Target и вернется к NewTarget (это похоже на то, что вы хотите). Чтобы получить последнее поведение, которое вы должны просто использовать следующий код в Target.onButtonClick():

Intent intent = new Intent(this, MainPage.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 
finish(); 

Это закончит как NewTarget и Target, а затем он закончит текущую MainPage деятельности и создать новый экземпляр MainPage деятельности (если startMode MainPage является «стандартным»).

Попробуйте это.

+0

Кроме того, вы обязательно должны удалить флаг 'Intent.FLAG_ACTIVITY_NEW_TASK' из намерения, которое вы используете для запуска' Target' –

+0

Я просто не хотел снова запускать mainPage, потому что он занимает слишком много времени. Но мне удалось сделать то, что я хочу сделать, просто изменив эту строку: targetIntent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK); в это: targetIntent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); Спасибо за ответ =) – yahya

+0

Да, точно. Вы можете предотвратить запуск другого экземпляра с использованием комбинаций флажков launchMode и намерений. Рад, что вы смогли это исправить! –

Смежные вопросы