如何在Android之间相互堆叠的活动之间传递数据?

时间:2013-05-23 19:42:18

标签: android

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

1 个答案:

答案 0 :(得分:1)

在你的中间活动是问题的来源。让我为你详细说明

当您为结果启动活动时,当您在该活动上调用完成时,onActivityResult会调用启动该活动的任何人(让我们将其称为父项)。

所以你有Activity1它会在点击时启动Activity2。 在Activity2中单击它启动Activity3(Activity3在另一个线程中启动)并完成返回到Activity1。活动3点击完成,但因为活动2已经消失,它不知道去哪里。

你需要做的是等待在Activity2上调用完成,直到Activity3返回。