Как получить startactivityforresult получить результат от 4-го упражнения
Я имею MainActivity
От этого startActivityForResult()
для 2-го activtiy
но я хочу результат с 4-го activity
что я должен сделать для этого?
Основная деятельность
FirstActivity
secondActivity
ThirdActivity
FourActivity
от этого я хочу получить результат от 4-го действия, но от второго до четвертого действия являются зависимыми действиями
MainActivity.java
public static String MY_RESULT=1000;
intent=new Intent(MainActivity.this,FirstActivity.class);
startActivityForResult(intent,MY_RESULT);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case MY_RESULT:
String info = data.getExtras().getString("KEY");
if(!info.equals("")) {
Log.i("TAAAG", info);
}
break;
}
}
}
FirstActivity.java
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
finish();
SecondActivity.java
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
startActivity(intent);
finish();
ThirdActivity.java
Intent intent = new Intent(ThirdActivity.this, FourActivity.class);
startActivity(intent);
finish();
FourActivity.java
Intent intent = new Intent();
intent.putExtra("KEY", "my data in string");
setResult(RESULT_OK, intent);
finish();
здесь, в MainActivity.java
Я не могу получить какой-либо результат. И я хочу получить результат от FourActivity.java
.Пожалуйста помоги
3 ответа
Там нет простого способа, вы должны использовать startActivityForResult()
для первой и третьей деятельности и использования setResult()
во всех слушать и передавать данные.
Вот пример кода:
class FirstActivity extends Activity {
public static int MY_RESULT = 1000;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(FirstActivity.this, FirstActivity.class);
startActivityForResult(intent, MY_RESULT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == MY_RESULT && resultCode == RESULT_OK) {
String dataStr = data.getStringExtra("KEY");
Toast.makeText(this, dataStr, Toast.LENGTH_LONG).show();
}
}
}
class SecondActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
startActivityForResult(intent, FirstActivity.MY_RESULT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FirstActivity.MY_RESULT && resultCode == RESULT_OK) {
setResult(resultCode, data);
finish();
}
}
}
class ThirdActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(ThirdActivity.this, FourthActivity.class);
startActivityForResult(intent, FirstActivity.MY_RESULT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FirstActivity.MY_RESULT && resultCode == RESULT_OK) {
setResult(resultCode, data);
finish();
}
}
}
class FourthActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent data = new Intent();
data.putExtra("KEY", "This is a test String");
setResult(RESULT_OK, data);
finish();
}
}
Другие возможные решения включают в себя:
- Определить свой собственный
Singleton
который может хранить данные во время сессии приложения - использование
EventBus
- использование
SharedPreferences
- Использовать локальную базу данных
Вы можете запустить каждое действие для результата и передать свой результат следующим образом:
FourthActivity -> ThirdActivity -> SecondActivity -> FirstActivity
В вашем третьем, втором и первом видах деятельности onActivityResult
получить результат от ранее закрытого Activity
,
На четвертом занятии вы поставили RESULT_OK
в setResult()
это хорошо, но в вашем onActivityResult
просто удалите это:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
String info = data.getExtras().getString("KEY");
if(!info.equals("")) {
Log.i("TAAAG", info);
}
}
Удачного кодирования!