사용자가 '활동'을 선택할 때 표시되는 '정보'화면 (활동) 기본 활동에서 옵션 메뉴의 '정보'항목을 클릭하십시오. '정보'화면에는 '닫기'라는 버튼이 있습니다.하위 활동이 setResult() 및 finish()를 실행하더라도 기본 활동의 onActivityResult가 호출되지 않음
내가 원하는 동작은 사용자가 '닫기'버튼을 클릭하면 이전 활동 (정보 활동이 시작된 활동)으로 이동해야한다는 것입니다. 이를 위해 startActivityForResult();
을 사용하여 주 활동 (TFT) 정보 활동 (TFTAbout)을 시작한 다음 에 setResult()
과 finish()
을 호출합니다. 그러면 '닫기'를 클릭하면 기본 활동에서 onActivityResult()
이 호출됩니다.
'Close (닫기)'를 클릭하면 주 활동 (TFT)이 호출되지 않습니다.
로그에서 활동 TFTAbout은 setResult()
및 finish()
을 실행하는 것으로 보입니다. 그러나 바로이 시점에서 onDestroy는 주 활동을 위해 호출됩니다. 그래서, 내 생각 엔 돌아 오는 시작 활동이 없기 때문에 onActivityResult()
이 호출되지 않습니다. 맞습니까?
(더 나은 readabiliy에 대한 타임 스탬프없이) 아래에 출력을 로그 캣를 참조하십시오
DEBUG/TFT(816): onOptionsItemSelected: 'About' item selected.
INFO/ActivityManager(563): Starting activity: Intent { action=android.intent.action.GET_CONTENT type=text/plain comp={com.wirel.tft/com.wirel.tft.TFTAbout} }
DEBUG/TFTAbout(816): onCreate: START
DEBUG/TFTAbout(816): onCreate: END
INFO/ActivityManager(563): Displayed activity com.wirel.tft/.TFTAbout: 3880 ms
DEBUG/TFT(816): onDestroy: BEGIN
DEBUG/TFT(816): onDestroy: END
DEBUG/dalvikvm(606): GC freed 672 objects/36656 bytes in 90ms
DEBUG/TFTAbout(816): onClick: 'Close' button pressed... Returning to calling activity.
WARN/ActivityManager(563): Activity pause timeout for HistoryRecord{4370efe0 {com.wirel.tft/com.wirel.tft.TFTAbout}}
WARN/ActivityManager(563): Activity destroy timeout for HistoryRecord{4370efe0 {com.wirel.tft/com.wirel.tft.TFTAbout}}
DEBUG/TFTAbout(816): onClick: Activity is finishing? true
런칭 활동의
코드 (TFT)의
@Override
public boolean onOptionsItemSelected(MenuItem mi)
{
int item_id = mi.getItemId();
switch (item_id)
{
case R.id.mi_about:
{
Log.d(LOG_TAG, "onOptionsItemSelected: 'About' selected.");
/* Start the activity to display the About page. */
Intent i = new Intent(Intent.ACTION_GET_CONTENT,
TFTMetadata.ABOUT_TEXT_URI);
i.setType("text/plain");
startActivityForResult(i, 0);
break;
}
....
}
@Override
protected void onActivityResult
(int request_code, int result_code, Intent i)
{
Log.d(LOG_TAG, "onActivityResult: START.");
super.onActivityResult(request_code, result_code, i);
/* Use the request code to select between multiple child activities we may have started. Here there is only one thing we launch. */
if (request_code == Activity.RESULT_FIRST_USER)
{
Log.d(LOG_TAG, "onActivityResult: 'About' activity has returned.");
}
}
코드 개시 활동 (TFTAbout) :
@Override
public void onCreate(Bundle savedInstanceState)
{
Log.d(LOG_TAG, "onCreate: START");
super.onCreate(savedInstanceState);
/* Set what to do when the user presses a key but the key press is
not handled by the application. */
setDefaultKeyMode(DEFAULT_KEYS_DISABLE);
/* Connect the appropriate resource to this activity. */
setContentView(R.layout.about);
/* Define the click listener for the Close button. */
Button b = (Button) findViewById(R.id.bt_close);
b.setOnClickListener(this);
}
public void onClick(View v)
{
Log.d(LOG_TAG, "onClick: 'Close' button pressed... Returning to calling activity.");
setResult(RESULT_OK, (new Intent()).setAction("About activity has finished!"));
finish();
ComponentName cn = this.getCallingActivity();
if (cn != null)
{
Log.d(LOG_TAG, "onClick: calling activity = " + cn.getClassName());
}
Log.d(LOG_TAG, "onClick: Activity is finishing? " + String.valueOf(this.isFinishing()));
return;
}
제게 누군가 내 주요 활동이 왜 파괴되고 있는지, 그리고 제가하고있는 일이 올바른지 설명해주십시오.
추가 활동을 대신 간단한 대화 상자로 바꾸기로했습니다. 이것은 새로운 활동을 다루지 않고도 제 목적을 완벽하게 지원합니다. 나는 이것을 처음 시도했을 것입니다. 어쨌든, 고마워, . 의견이 있으면 누구나 의견을 남기십시오. –