Сбой при перемещении данных из действия C через действие B в действие A - PullRequest
0 голосов
/ 01 марта 2020

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

1 Ответ

0 голосов
/ 01 марта 2020

Пробуя разные вещи в течение нескольких часов, я обнаружил, что все вернулось к использованию

startActivity(intent)

вместо

startActivityForResult(intent, 1)

внутри Действия A ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...