Java 无法将数据从活动C通过活动B移动到活动A
我试图移动一些数据问题是,当我直接从活动A跳到活动C(以下称为A和C)时,做一些更改并按下一个按钮,当我从C返回到A时,数据不会丢失。它完美地更新了我的不同文本框、搜索栏等 但是当我通过B从A转到C,然后再通过B回到A时,我没有得到我的数据。A不会随C中所做的更改而更新 以下是我尝试过的内容(我尝试只显示代码,我发现这与此相关): 活动A(主):Java 无法将数据从活动C通过活动B移动到活动A,java,android-studio,android-activity,android-lifecycle,Java,Android Studio,Android Activity,Android Lifecycle,我试图移动一些数据问题是,当我直接从活动A跳到活动C(以下称为A和C)时,做一些更改并按下一个按钮,当我从C返回到A时,数据不会丢失。它完美地更新了我的不同文本框、搜索栏等 但是当我通过B从A转到C,然后再通过B回到A时,我没有得到我的数据。A不会随C中所做的更改而更新 以下是我尝试过的内容(我尝试只显示代码,我发现这与此相关): 活动A(主): @Override protected void onCreate(Bundle savedInstanceState) { super.
@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相关的内容。继续进行活动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。原因是,当我从B转到C时,没有从C直接跳到a和“finish()”B,是因为我不能完成()B,因为我在C中有一个“cancel”-按钮,当按下它时,我从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再返回时,数据(/changes in C)不会丢失,而是在A中更新:
listMyList.setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView父项、视图、整型位置、长id){
Game Game=(游戏)parent.getItemAtPosition(位置);
意向意向=新意向(MainActivity.this、ChangesActivity.class);
意图。putExtra(“游戏”,游戏);
意图。额外(“位置”,位置);
intent.putExtra(“image”,game.getImage());
startActivityForResult(意向,1);
返回true;
}
});
我错过了什么或做错了什么?我看不出有任何错误,我认为我把额外的东西放在了正确的位置,但我显然遗漏了一些东西。在尝试了几个小时不同的东西后,我发现,所有这些都回到了使用中
startActivity(intent)
反而
startActivityForResult(intent, 1)
内部活动A
startActivity(intent)
startActivityForResult(intent, 1)