我已经阅读了几个关于如何在Android中的两个活动之间传递数据的问题,但没有关于如何通过几个级别的问题。我知道如果知道如何在2个活动之间传递它会很简单,但奇怪的是它没有。
当我只从主要活动的子活动中传出时,一切正常。但是,如果我从主要活动调用一个活动,而主要活动又调用另一个活动,我不会通过任何数据传递。当我进入顶级活动(即从第一个子活动调用到主活动的活动)并且在返回结果之前终止时,第一个被调用的活动是否继续存在的问题是什么?
正如您所看到的,我正在尝试以三层传递数据,但没有任何内容从顶层活动传递到MainActivity。帮助赞赏。
MainActivity.java
Intent constIntent = new Intent(MainActivity.this, ConstantScreen.class);
startActivityForResult(constIntent, 1); //Start activity - Rest is done onActivityResult....
break;
//
...........................
@Override
public void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
constData= data.getStringExtra("constData2Main");
String constStackData = switchSignPow(constData);
inputStack.add(constStackData); inputDisplay.add(constData);
cursorPosition += constData.length(); ++stackPosition; ++inputDisplayCursor;
printInStack();
inputText.setSelection(cursorPosition);
}
}
然后是下一个活动:
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.constants_menu);
}
String constData;
public void onClick_Constant(View v){
Intent intent = new Intent();
Intent constIntent;
switch(v.getId()){
case(R.id.MECHANICS):
constIntent = new Intent(ConstantScreen.this, ClassicalMechanics.class);
startActivityForResult(constIntent, 2);
break;
default:
setResult(RESULT_CANCELED, intent);
break;
}
finish();
}
@Override
public void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode, resultCode, data);
Intent intent = new Intent();
if(resultCode == RESULT_OK){
constData= data.getStringExtra("constData");
intent.putExtra("constData2Main", constData);
setResult(RESULT_OK, intent);
}
else{
setResult(RESULT_CANCELED, intent);
}
}
最后是第三项TOP活动:
ClassicalMehcanics.java
public class ClassicalMechanics extends Activity{
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.classical_mechanics);
}
String constData;
public void onClick_Constant(View v){
Intent intent = new Intent();
switch(v.getId()){
case(R.id.CancelClassic):
setResult(RESULT_CANCELED, intent);
break;
default:
constData= ((Button)findViewById(R.id.GRAVITYC)).getTag().toString();
intent.putExtra("constData", constData);
setResult(RESULT_OK, intent);
break;
}
finish();
}
}
答案 0 :(得分:1)
在你的中间活动是问题的来源。让我为你详细说明
当您为结果启动活动时,当您在该活动上调用完成时,onActivityResult
会调用启动该活动的任何人(让我们将其称为父项)。
所以你有Activity1它会在点击时启动Activity2。 在Activity2中单击它启动Activity3(Activity3在另一个线程中启动)并完成返回到Activity1。活动3点击完成,但因为活动2已经消失,它不知道去哪里。
你需要做的是等待在Activity2上调用完成,直到Activity3返回。