我已经阅读了几个关于如何在 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();
}
}