Ответ 1
Я не могу объяснить, что происходит в вашем коде, но у меня есть образец проекта, чтобы сделать это.
a FooActivity с помощью только кнопки btnFoo:
@Override
protected void onStart() {
super.onStart();
btnFoo.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent("xper.activity.ACTIVITY_BAR_INTENT"),1);
}
});
}
и BarActivity, добавленный в AndroidManifest.xml следующим образом:
<activity
android:name = "BarActivity">
<intent-filter>
<action
android:name = "xper.activity.ACTIVITY_BAR_INTENT"/>
<category
android:name = "android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
Соответствующий код для извлечения намерения внутри панели находится в onClicEvent из btnBar (Button):
@Override
protected void onStart() {
super.onStart();
btnBar.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("xper.activity.ACTIVITY_BAR_RESULT_INTENT");
intent.putExtra("codBar", "bar");
setResult(Activity.RESULT_OK, intent);
finish();
}
});
}
Теперь, если вы плохо обработали событие onActivityResult(), когда вы нажимаете кнопку Android "BACK", вы можете получить ошибки.
Если намерение (намерение) в Activity B должно предоставить некоторую информацию активности A, если вы нажмете кнопку назад, я не знаю, будет ли активность B находиться в стеке, но намерение isn ' т. Поэтому я сделал следующее:
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
//Intent intent = new Intent("xper.activity.ACTIVITY_BAR_RESULT_INTENT");
//intent.putExtra("codBar", "bar");
//setResult(Activity.RESULT_CANCELED, intent);
setResult(Activity.RESULT_CANCELED);
finish();
}
Обращаясь к информации, я сделал следующее в событии onActivityResult(), чтобы увидеть полученную информацию в деятельности панели:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null) {
Toast.makeText(this, "BAR\trequestCode == " + requestCode + "\tresultCode == " + resultCode + "\tdata == " + data, 10000).show();
btnFoo.setText("BAR\trequestCode == " + requestCode + "\tresultCode == " + resultCode + "\tdata == " + data /*+ "extras == " + data.getExtras().getString("codBar")*/);
} else {
Toast.makeText(this, "BAR\trequestCode == " + requestCode + "\tresultCode == " + resultCode, 10000).show();
btnFoo.setText("BAR\trequestCode == " + requestCode + "\tresultCode == " + resultCode);
}
}
Если у вас есть больше действий для возврата информации к родительской активности, то хорошие оценки делают следующее:
//put private static final int globals atributes with the respective name of the
//activity to represent the requestCode for each activity you have like:
private static final int ACTIVITY1 = 117;
private static final int ACTIVITY2 = 118;
...
private static final int ACTIVITYN = 215;
//In the event onActivityResult() is better use the switch statement to handle each
//specific activity to catch information
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_CANCELED) return; // breaks
//if you decide to handle some information of Activity.RESULT_CANCELED
//ignore the above condition that returns and handle it inside the switch statement
switch(requestCode) {
case ACTIVITY1:
{
//Dosomething
} break;
case ACTIVITY2:
{
//Dosomething
} break;
...
case ACTIVITYN:
{
//Dosomething
} break;
}
}
Если вы не можете сделать этот пример кода. пожалуйста, дайте мне свой адрес электронной почты для отправки проекта FooBarActivity