我正在尝试移动一些数据,事实是,当我直接从活动A跳到活动C(以下称为A和C)时,进行一些更改并按一下按钮,我不会感到困惑从C返回到A的数据。它完美地更新了我的不同文本框,搜索栏等。
但是当我从A经由B到C,然后再通过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 } });
我猜这部分工作正常。
然后我在活动A中有一个onActivityResult方法-当我从C转到B到A时,处理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); 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); } });
但是我在B中也有一个onActivityResult方法,它像这样:
。在这里,我做了一些更改-使用搜索栏为主题评分,填写文本框等。@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(); } } }
最后是我的活动C
我有一个按钮,当我按下它时,它应该转到B(在C中进行了更改),然后直接从那里转到A。这样做的原因而不是直接从C转到A,然后“完成()“ B,当从B转到C时,我无法完成()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(); } });
请注意,当在活动A中使用onItemLongClick时-便可以以某种方式起作用……但这不是故意的。目的是通过B到达C,然后通过B从C到达A ...因此,当我使用此功能并从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; } });
我缺少什么或做错了什么?我看不到任何错误,我认为我在正确的地方放了一些,但我显然缺少了一些。。
我正在尝试移动一些数据,结果是,当我直接从活动A跳到活动C(以下称为A和C)时,请进行一些更改并按一个按钮,则数据不会丢失。 ..
[尝试了数小时不同的事情后,我发现这一切都回到了使用状态