Android : 활동의 반환 캡처


82

새로운 활동 시작에 관한 질문이 있습니다. 이것으로 귀결됩니다. 보기에 3 개의 탭이 있습니다.

A) contains gMap activity
 B) camera activity
 C) some random text fields.

요구 사항은 응용 프로그램이 세로 모드에서 실행되어야한다는 것입니다.

카메라 미리보기 표면 (B)을 제외하고 3 개 탭 모두 예상대로 작동합니다. 90도 회전합니다. 그것들을 올바르게 만드는 유일한 방법은 내 모든 탭을 던지고 거의 작동하지 않는 가로 모드로 앱을 설정하는 것입니다.

내 해결책은 다음과 같습니다.

다음을 제외하고 비어있는 일반 활동이있는 내 카메라 활동

Intent i = new Intent(this,CameraActivity.class);
    startActivity(i);

그러면 내 CameraActivity가 시작됩니다. 그리고 그것은 잘 작동합니다. 선형 레이아웃을 만들고 실제 탭처럼 보이는 3 개의 이미지를 포함해야했기 때문에 화면을 가로로 회전하면서 탭의 작동을 모방하고 비주얼을 세로로 유지할 수 있습니다. 사용자는 이미지 (버튼) 중 하나를 클릭하여 다음 탭을 표시 할 수 있습니다. 이것은 내 문제입니다. 내 '카메라 활동'을 종료하고 탭의 '빈 활동'으로 돌아 가야합니다. 여기에서 내 이미지에서 원하는 탭을 클릭하는 것으로 해석되어야합니다.

중요한 것은 그것이 돌아 왔을 때 탭 아래의 빈 (검은 색) 페이지로 돌아가는 것입니다 ( '비어 있기'때문입니다). 활동을 호출 한 페이지로 돌아가는 반환 이벤트를 캡처 한 다음 수행 한 작업을 보려면 어떻게해야합니까?

카메라 활동을 종료하기 위해 클릭되는 가짜 탭 (이미지)에 응답 할 수있는 onclicklistener를 설정할 수 있습니다. 종료시 탭이 업데이트되어 돌아 오는 곳으로 이동해야합니다. 어떤 제안?

감사,

답변:


159

원하는대로 작동하도록 해결 방법을 해결하는 방법에 초점을 맞출 것입니다.

한 활동에서 수행 된 작업을 다른 활동에서 캡처하려면 세 단계가 필요합니다.

startActivityForResult대신을 사용하여 보조 활동 ( '카메라 활동')을 하위 활동으로 시작합니다 startActivity.

Intent i = new Intent(this,CameraActivity.class);    
startActivityForResult(i, STATIC_INTEGER_VALUE);

사용자가 다른 탭 이미지를 클릭 할 때 활동을 닫는 것보다 하위 활동 (카메라 활동) 내에서 새 인 텐트를 생성하고 추가 번들을 사용하여 상위 앱으로 돌아갈 때 표시 할 탭의 색인을 포함해야합니다. . 카메라 활동을 닫기 위해 호출 setResult하기 전에 부모 호출로 다시 전달합니다 finish.

resultIntent = new Intent(null);
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, tabIndexValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();

마지막 단계는 호출 활동에 onActivityResult있으며 카메라 활동에서 콜백을 수신하도록 재정의 합니다. 반환 된 인 텐트에서 추가 정보를 가져와 표시해야하는 탭의 색인을 결정합니다.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {     
  super.onActivityResult(requestCode, resultCode, data); 
  switch(requestCode) { 
    case (STATIC_INTEGER_VALUE) : { 
      if (resultCode == Activity.RESULT_OK) { 
      int tabIndex = data.getIntExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
      // TODO Switch tabs using the index.
      } 
      break; 
    } 
  } 
} 

3
왜 requestCode를 켜고 requestCode == RESULT_OK인지 확인합니까? 편집 : 신경 쓰지 마세요. requestCode / resultCode 차이가 있습니다.
varikin 2010

1
나는이 작업을 수행 할 수 AsynkTask는 AS 두 번째 활동 ?
Francisco Corrales Morales 2014 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.