TabHost Activity에서 결과(ActivityForResult 시작)를 반환하는 방법은 무엇입니까?
저는 예를 들어 3개의 수업이 있습니다. 주요 활동인 A반입니다.클래스 A에서 startActivityForResult:
Intent intent = new Intent(this, ClassB.class);
startActivityForResult(intent, "STRING");
클래스 B, 이 클래스는 TabActivity입니다.
Intent intent = new Intent(this, ClassC.class);
tabHost.addTab...
클래스 C, 이 클래스는 정규 활동입니다.
Intent intent = this.getIntent();
intent.putExtra("SOMETHING", "EXTRAS");
this.setResult(RESULT_OK, intent);
finish();
onActivityResult는 클래스 A에서 호출되지만 resultCode는RESULT_CANCELED
대신에RESULT_OK
반환된 의도는 null입니다.TabHost 내의 Activity에서 무언가를 반환하려면 어떻게 해야 합니까?
문제는 C반이 실제로 B반 안에서 운영되고 있다는 것과 B반이 그것을 돌려주는 것이라는 것을 알고 있습니다.RESULT_CANCELED
다시 A급으로.저는 아직 일을 잘 모릅니다.
오, 하나님!몇 시간을 들여 안드로이드 소스를 다운로드한 끝에 드디어 해결책을 찾았습니다.
Activity 클래스를 보면 다음을 보실 수 있습니다.finish()
method는 다음이 있는 경우에만 결과를 다시 보냅니다.mParent
에 설정된 속성null
. 그렇지 않으면 결과가 손실됩니다.
public void finish() {
if (mParent == null) {
int resultCode;
Intent resultData;
synchronized (this) {
resultCode = mResultCode;
resultData = mResultData;
}
if (Config.LOGV) Log.v(TAG, "Finishing self: token=" + mToken);
try {
if (ActivityManagerNative.getDefault()
.finishActivity(mToken, resultCode, resultData)) {
mFinished = true;
}
} catch (RemoteException e) {
// Empty
}
} else {
mParent.finishFromChild(this);
}
}
그래서 제 해결책은 다음과 같이 부모 활동에 결과를 설정하는 것입니다.
Intent data = new Intent();
[...]
if (getParent() == null) {
setResult(Activity.RESULT_OK, data);
} else {
getParent().setResult(Activity.RESULT_OK, data);
}
finish();
누군가가 이 문제를 다시 해결해 준다면 도움이 되었으면 좋겠습니다.
http://tylenoly.wordpress.com/2010/10/27/how-to-finish-activity-with-results/
"param_result"를 약간 수정한 경우
/* Start Activity */
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClassName("com.thinoo.ActivityTest", "com.thinoo.ActivityTest.NewActivity");
startActivityForResult(intent,90);
}
/* Called when the second activity's finished */
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode) {
case 90:
if (resultCode == RESULT_OK) {
Bundle res = data.getExtras();
String result = res.getString("param_result");
Log.d("FIRST", "result:"+result);
}
break;
}
}
private void finishWithResult()
{
Bundle conData = new Bundle();
conData.putString("param_result", "Thanks Thanks");
Intent intent = new Intent();
intent.putExtras(conData);
setResult(RESULT_OK, intent);
finish();
}
Intent.FLAG_ACTIVE_FORWARD_RESULT?
이 목적이 설정되어 있고 기존 활동에서 새 활동을 시작하는 데 사용되는 경우, 기존 활동의 회신 대상이 새 활동으로 옮겨집니다.
클래스 B에서도 ActivityResult를 구현하고 startActivityForResult를 사용하여 클래스 C를 시작할 수 있습니다.클래스 B에서 결과를 얻으면 클래스 C의 결과를 기반으로 클래스 A의 결과를 설정합니다.저는 이것을 시도해 본 적은 없지만 이것은 효과가 있을 것 같습니다.
또 다른 주의해야 할 점은 활동 A가 단일 인스턴스 활동이 되어서는 안 된다는 것입니다.StartActivityForResult가 작동하려면 클래스 B가 액티비티 A의 하위 액티비티여야 하며 단일 인스턴스 액티비티에서는 불가능하므로 새 액티비티(클래스 B)가 새 태스크에서 시작됩니다.
Activity 1에서 Activity 2를 시작하고 결과를 얻는 경우, start ActivityForResult를 사용하고 Activity 1에서 ActivityResult를 구현하고 Activity2에서 setResult를 사용할 수 있습니다.
Intent intent = new Intent(this, Activity2.class);
intent.putExtra(NUMERO1, numero1);
intent.putExtra(NUMERO2, numero2);
//startActivity(intent);
startActivityForResult(intent, MI_REQUEST_CODE);
언급URL : https://stackoverflow.com/questions/2497205/how-to-return-a-result-startactivityforresult-from-a-tabhost-activity
'programing' 카테고리의 다른 글
현재 GMT 시간에 대한 MySQL 쿼리 (0) | 2023.11.07 |
---|---|
플라스크에서 MySQL 사용 (0) | 2023.11.07 |
utf-8의 utf-8에서 php로 오라클의 데이터 (0) | 2023.11.02 |
오라클 - dblink 위에 커밋? (0) | 2023.11.02 |
하위 쿼리 결과에서 ID 삭제 (0) | 2023.11.02 |