Я пытаюсь переместить некоторые данные , и дело в том, что, когда я прыгаю непосредственно с Действия A к Деятельности C (далее именуемой A и C), делаю некоторые изменения и нажимаю Кнопка, у меня нет потери данных, при переходе от C к A. Он обновляет мои различные текстовые поля, полосы поиска и т. д. c. отлично.
Но когда я go из A в C через B, а затем обратно - через B снова в A , я не получаю свои данные с собой. A не обновляется с изменениями, сделанными в C.
Вот что я пробовал (я пытался показать только тот код, который мне подходит):
Упражнение A (Основное):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState!=null)
games= (ArrayList<Game>) savedInstanceState.getSerializable("SAVED");
else
loadArrayFile();
...
A lot of unrelated code ..
...
// Here I want to go from A to B
listMyGames.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
Game game = (Game) arg0.getItemAtPosition(position);
Intent intent = new Intent(MainActivity.this, SpecialsActivity.class);
intent.putExtra("game", game);
intent.putExtra("pos", position);
intent.putExtra("image", game.getImage());
startActivity(intent); <<<<<<<< HERE IS THE ERROR
}
});
Я думаю, эта часть работает нормально.
Затем у меня есть метод onActivityResult внутри Деятельности A - для обработки ввода "от B, когда я go от C до B к A:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
Game updatedGameSpecials = (Game)data.getSerializableExtra("updatedGameSpecials");
int position = data.getIntExtra("pos", -1);
adapter.remove(adapter.getItem(position));
adapter.insert(updatedGameSpecials, position);
}
}
}
...
...
Я думаю, что это связано с A. Переход к Упражнение B :
// Inside the onCreate-method:
...
btnGoToChangesActivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SpecialsActivity.this, ChangesActivity.class);
intent.putExtra("game", game);
intent.putExtra("pos", position);
intent.putExtra("image", game.getImage());
startActivityForResult(intent, 1);
}
});
Но у меня также есть метод onActivityResult в B, который выглядит следующим образом:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
Game updatedGameSpecials = (Game)data.getSerializableExtra("updatedGameSpecials");
int position = data.getIntExtra("pos", -1);
data.putExtra("updatedGameSpecials", updatedGameSpecials);
data.putExtra("pos", position);
setResult(RESULT_OK, data);
finish();
}
}
}
И, наконец, моя Activity C. Здесь я делаю некоторые изменения - оцените тему, используя панель поиска, заполните текстовое поле и т. Д. c.
У меня есть кнопка, которая, когда я нажимаю ее, должна go в B (с изменениями, внесенными в C), оттуда прямо в A. Причина этого и не делать прямой переход с C на A и "fini sh ()" B, при переходе от B к C, я не могу fini sh () B, потому что у меня есть кнопка "отмена" в C, что при нажатии переводит меня с C в B:
btnSaveChanges.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
game.setGameChanges(etGameChanges.getText().toString());
Intent data = new Intent();
position = getIntent().getIntExtra("pos", -1);
data.putExtra("pos", position);
data.putExtra("updatedGameSpecials", game);
setResult(RESULT_OK, data);
finish();
}
});
Обратите внимание, что при использовании onItemLongClick внутри Activity A - тогда это как-то работает ... Но это не намерение. Намерение состоит в том, чтобы go до C через B и от C до A через B ... Поэтому, когда я использую эту функцию и go от A до C и обратно, тогда данные (/ изменения в C) не теряются, но обновляются в A:
listMyList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Game game = (Game)parent.getItemAtPosition(position);
Intent intent = new Intent(MainActivity.this, ChangesActivity.class);
intent.putExtra("game", game);
intent.putExtra("position", position);
intent.putExtra("image", game.getImage());
startActivityForResult(intent, 1);
return true;
}
});
Что я пропускаю или делаю неправильно? Я не вижу никаких ошибок и, по-моему, я поставил Extra правильные места, но я явно что-то упускаю ..