2013-05-23 1 views
0

Android에서 2 가지 활동간에 데이터를 전달하는 방법에 대한 몇 가지 질문을 읽었지만 여러 단계를 통과하는 방법에 대해서는 설명하지 않았습니다. 나는 2 가지 행동 사이를 어떻게 지나가는지를 알았을 때 그것이 간단 할 것이라고 생각했지만, 이상하게도 그것을하지 않았다.Android 용으로 서로 쌓은 활동간에 데이터를 전달하는 방법은 무엇입니까?

주 활동의 하위 활동 만 통과하면 모든 것이 정상적으로 작동합니다. 그러나 주 활동에서 활동을 호출하면 다른 활동을 호출하고 데이터를 전달하지 않습니다. 첫 번째 활동을 입력 (즉, 첫 번째 하위 활동에서 주까지 호출 된 활동)하고 결과가 반환되기 전에 종료되면 첫 번째로 호출 된 활동이 계속되는 문제입니까?

3 층으로 데이터를 전달하려고하지만 맨 위 활동에서 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); 
    } 
} 

그런 다음 활동 : 문제의에서 오는 어디 중간 활동에

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

은 다음과 같습니다

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 활동

. 당신을 위해 그것을 상세히 설명해 드리겠습니다.

결과를위한 활동을 시작할 때, 그 활동에 대해 finish를 호출하면 onActivityResult은 활동을 시작한 사람 (부모라고 부를 수 있음)에게 전화를받습니다.

그래서 Activity1을 클릭하면 클릭하면 Activity2가 시작됩니다. 클릭시 Activity2에서 Activity3이 시작되고 (Activity3은 다른 스레드에서 시작됨) Activity1로 돌아갑니다. 클릭만으로 Activity3 끝났지 만 Activity2가 없어 졌으므로 어디로 가야할지 모릅니다.

Activity3이 반환 될 때까지 Activity2에 대한 호출을 기다리는 것이 좋습니다.

+0

Ofcourse, 좋은 설명 주셔서 감사합니다! Activity2에서 onActivityResult (...)에 finish()를 배치했습니다. 그런 다음 설명대로 활동을 기다려야합니다. – Euklides

관련 문제