0

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

1 回答 1

1

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

当您开始一项活动以获得结果时,当您对该活动调用完成时,onActivityResult将调用启动该活动的任何人(让我们称其为父项)。

所以你有 Activity1 它在点击时启动 Activity2。在 Activity2 中单击它会启动 Activity3(Activity3 在不同的线程中启动)并完成返回到 Activity1。Activity3 点击你就完成了,但因为 Activity2 不见了,它不知道去哪里。

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

于 2013-05-23T20:00:17.303 回答