Android: Bir etkinliğin geri dönüşünü yakalama


82

Yeni faaliyetler başlatmakla ilgili bir sorum var. Şuna kadar kaynıyor. Bir görünümde 3 sekmem var

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

Gereksinim, uygulamanın Portre modunda çalışmasıdır.

3 sekmenin tümü, Kamera Önizleme Yüzeyi (B) dışında beklendiği gibi çalışır. 90 derece döndürülür. Bunu doğru yapmanın tek yolu, uygulamayı tüm sekmelerimi çevreleyen ve hemen hemen çalıştırılamaz olan manzaraya ayarlamaktır.

Benim çözümüm şudur: değiştir

kamera etkinliğimde boş olan normal etkinlik

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

Bu, CameraActivity'mi başlatır. Ve bu iyi çalışıyor. Doğrusal bir düzen yapmam ve gerçek sekmelere benzeyen 3 resim eklemem gerekiyordu, böylece ekranı manzaraya döndürürken sekmelerin işleyişini deneyebilir ve taklit edebilir ve görselleri dikey olarak tutabilirim. Kullanıcı, sonraki sekmeyi görüntülemek için resimlerden (düğmeler) birine tıklayabilir. Bu benim sorunum. Bir sekmedeki 'boş etkinliğe' dönerek 'kamera etkinliğimden' çıkmalı, burada resmimden kesilmiş sekmeye tıklamak için yorumlanması gerekir.

Önemli olan, geri döndüğünde, bir sekme altındaki boş (siyah) bir sayfaya dönmesidir (çünkü 'boş'). Geri dönüş olayını, etkinliği çağıran sayfaya nasıl yakalayabilirim ve sonra hangi eylemi gerçekleştirdiklerini görebilirim?

Kamera etkinliğinden çıkmak için tıklanan sahte sekmelere (görüntüler) yanıt verebileceğim bir onclicklistener ayarlayabilirim. Çıkışta sekme, geri döndüğünüz yer olacak şekilde güncellenmelidir. herhangi bir öneri?

Teşekkürler,

Yanıtlar:


159

İstediğiniz gibi davranması için çalışma alanınızı nasıl çözeceğinizi yanıtlamaya odaklanacağım.

Bir Aktivite üzerinde gerçekleştirilen eylemleri diğerinde yakalamak için üç adım gerekir.

İkincil Etkinliği ('kamera Etkinliğiniz') startActivityForResultyerine kullanarak alt etkinlik olarak başlatın startActivity.

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

Alt aktivite (kamera Etkinliği) dahilinde, bir kullanıcı farklı sekme resmini tıkladığında Aktiviteyi kapatmak yerine, yeni bir Amaç oluşturmanız ve ekstra paketini kullanarak ana uygulamaya döndüğünüzde görüntülenecek sekmenin dizinini eklemeniz gerekir. . Kamera Aktivitesini kapatmak için aramadan setResultönce ebeveyn aramasına geri vermek için finish.

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

Son adım, çağırma Etkinliğidir, onActivityResultkamera Etkinliğinden geri aramaları dinlemek için geçersiz kılınır . Görüntülemeniz gereken sekmenin dizinini belirlemek için döndürülen Niyetten fazladan alın.

@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
Neden requestCode'u açıp ardından requestCode == RESULT_OK olup olmadığını kontrol ediyorsunuz? Düzenleme: Nevermind, requestCode / resultCode farkını görüyorum.
varikin

1
bunu ikinci aktiviteAsynkTask olarak yapabilir miyim ?
Francisco Corrales Morales
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.