Android - Arama etkinliği bittiğinde paylaşılan öğe geçişleri ()

Daha fazla Materyal uygulaması yapmak için çalışıyorum ve sadece bazı paylaşılan eleman geçişlerinin nasıl uygulanacağı üzerine sıkışıp kaldım. Başka bir B'yi başlatan bir A aktivitesine sahibim ve ardından arka yığından çıkarmak için finish() çağırır. Benim durumumda, iki faaliyet arasında paylaşmak istediğim bir unsur var ama A'dan B'ye geçtikten sonra A artık önemli değil. StartActivity (ctx, niyet, bundle) işleminden sonra finish() komutunu çağırmazsam, exit/enter animasyonu mükemmel çalışır. Ancak, eğer çağrı bitirirseniz, animasyon başlamadan önce gerçekten çirkin bir titreme olur.

Gözden kaçtığım bir şey var mı yoksa yapmaya çalıştığım şeyi yapmak mümkün değil mi?

24

10 cevap

GÜNCELLEME

Çok daha iyi ve daha basit bir yol

ActivityCompat. finishAfterTransition(this);

<3 support library.

22
katma
@ksarmalkar, finishAfterTransition geçiş tamamlandıktan sonra finish 'i çağırmaz ; sadece hemen bitirir 'i çağırır. Böylece, Etkinlik A'dan B'ye geçiş yapıyorsanız ve B kaybolursa, A gider, böylece Ana ekran boşalır (veya muhtemelen başka bir Etkinlik). Not: Bu yalnızca paylaşılan geçişler kullanıldığında gerçekleşiyor gibi görünmektedir.
katma yazar David Murdoch, kaynak
finishWithTransition 'ı bulamıyorum. Bu yüzden finishAfterTransition 'ı denedim ve çalışmadım.
katma yazar guness, kaynak
Onun destek kütüphanesinde. Ayrıca targetSDK sürümünüzü çarptırmayı deneyin
katma yazar ksarmalkar, kaynak
titreyerek ne demek istiyorsun? biraz nereye biraz yükleyebilir ve buraya bağlantı gönderebilir misiniz
katma yazar ksarmalkar, kaynak
harika, teşekkürler, güncellendi.
katma yazar ksarmalkar, kaynak
işe yaramıyor mu, alternatif yok mu?
katma yazar ViVekH, kaynak
bu hala paylaşılan bir unsur kullanarak benim için titremeye neden oluyor.
katma yazar xsorifc28, kaynak
Çağrı aslında: ActivityCompat.finishAfterTransition (this); Sadece test edildi ve harika çalışıyor.
katma yazar Darren B, kaynak
finishAfterTransition yalnızca etkinlik geçişinden sonra çağrılardır, paylaşılan öğeler farklı bir geçiştir ve boolean işlemini yapmanız gerekir.
katma yazar extmkv, kaynak

GÜNCELLEME

Çok daha iyi ve daha basit bir yol

ActivityCompat. finishAfterTransition(this);

<3 support library.

22
katma
@ksarmalkar, finishAfterTransition geçiş tamamlandıktan sonra finish 'i çağırmaz ; sadece hemen bitirir 'i çağırır. Böylece, Etkinlik A'dan B'ye geçiş yapıyorsanız ve B kaybolursa, A gider, böylece Ana ekran boşalır (veya muhtemelen başka bir Etkinlik). Not: Bu yalnızca paylaşılan geçişler kullanıldığında gerçekleşiyor gibi görünmektedir.
katma yazar David Murdoch, kaynak
finishWithTransition 'ı bulamıyorum. Bu yüzden finishAfterTransition 'ı denedim ve çalışmadım.
katma yazar guness, kaynak
Onun destek kütüphanesinde. Ayrıca targetSDK sürümünüzü çarptırmayı deneyin
katma yazar ksarmalkar, kaynak
titreyerek ne demek istiyorsun? biraz nereye biraz yükleyebilir ve buraya bağlantı gönderebilir misiniz
katma yazar ksarmalkar, kaynak
harika, teşekkürler, güncellendi.
katma yazar ksarmalkar, kaynak
işe yaramıyor mu, alternatif yok mu?
katma yazar ViVekH, kaynak
bu hala paylaşılan bir unsur kullanarak benim için titremeye neden oluyor.
katma yazar xsorifc28, kaynak
Çağrı aslında: ActivityCompat.finishAfterTransition (this); Sadece test edildi ve harika çalışıyor.
katma yazar Darren B, kaynak
finishAfterTransition yalnızca etkinlik geçişinden sonra çağrılardır, paylaşılan öğeler farklı bir geçiştir ve boolean işlemini yapmanız gerekir.
katma yazar extmkv, kaynak

GÜNCELLEME

Çok daha iyi ve daha basit bir yol

ActivityCompat. finishAfterTransition(this);

<3 support library.

22
katma
@ksarmalkar, finishAfterTransition geçiş tamamlandıktan sonra finish 'i çağırmaz ; sadece hemen bitirir 'i çağırır. Böylece, Etkinlik A'dan B'ye geçiş yapıyorsanız ve B kaybolursa, A gider, böylece Ana ekran boşalır (veya muhtemelen başka bir Etkinlik). Not: Bu yalnızca paylaşılan geçişler kullanıldığında gerçekleşiyor gibi görünmektedir.
katma yazar David Murdoch, kaynak
finishWithTransition 'ı bulamıyorum. Bu yüzden finishAfterTransition 'ı denedim ve çalışmadım.
katma yazar guness, kaynak
titreyerek ne demek istiyorsun? biraz nereye biraz yükleyebilir ve buraya bağlantı gönderebilir misiniz
katma yazar ksarmalkar, kaynak
Onun destek kütüphanesinde. Ayrıca targetSDK sürümünüzü çarptırmayı deneyin
katma yazar ksarmalkar, kaynak
harika, teşekkürler, güncellendi.
katma yazar ksarmalkar, kaynak
işe yaramıyor mu, alternatif yok mu?
katma yazar ViVekH, kaynak
bu hala paylaşılan bir unsur kullanarak benim için titremeye neden oluyor.
katma yazar xsorifc28, kaynak
Çağrı aslında: ActivityCompat.finishAfterTransition (this); Sadece test edildi ve harika çalışıyor.
katma yazar Darren B, kaynak
finishAfterTransition yalnızca etkinlik geçişinden sonra çağrılardır, paylaşılan öğeler farklı bir geçiştir ve boolean işlemini yapmanız gerekir.
katma yazar extmkv, kaynak

Etkinliğinizi onStop işlevinde tamamlayabilirsiniz, bunun yalnızca A'dan B'ye geçiş yaptığınızda gerçekleşmesini istiyorsanız, bir bayrak oluşturun ve startActivity'yi çağırdıktan sonra ayarlayın (ctx, intent, bundle):

@Override
public void onStop() {
    super.onStop();
    if(mShouldFinish)
         finish();
}

A aktivitesinin artık orada olmaması nedeniyle finish() işlevini çağırmak ve finishAfterTranstion() işlevini çağırmak için B etkinliğiyle işiniz bittiğinden emin olun

A aktivitesini bitirdikten sonra, B tuşuna basarsanız, B'deki paylaşılan öğe ekranda asılı kalabilir. Bundan kaçınmak için ActivityB.onEnterAnimationComplete konumunda null olarak null değerine ayarlayın.

21
katma
Bu benim için işe yaramıyor, bunu yaptığımda paylaşılan eleman geçişi doğru değil. Aktivite A'yı bitirmezsem her şey yolunda ama geçiş bittikten sonra yapmak istiyorum. Bunu işe alamıyorum.
katma yazar Gabor Peto, kaynak

Etkinliğinizi onStop işlevinde tamamlayabilirsiniz, bunun yalnızca A'dan B'ye geçiş yaptığınızda gerçekleşmesini istiyorsanız, bir bayrak oluşturun ve startActivity'yi çağırdıktan sonra ayarlayın (ctx, intent, bundle):

@Override
public void onStop() {
    super.onStop();
    if(mShouldFinish)
         finish();
}

A aktivitesinin artık orada olmaması nedeniyle finish() işlevini çağırmak ve finishAfterTranstion() işlevini çağırmak için B etkinliğiyle işiniz bittiğinden emin olun

A aktivitesini bitirdikten sonra, B tuşuna basarsanız, B'deki paylaşılan öğe ekranda asılı kalabilir. Bundan kaçınmak için ActivityB.onEnterAnimationComplete konumunda null olarak null değerine ayarlayın.

21
katma
Bu benim için işe yaramıyor, bunu yaptığımda paylaşılan eleman geçişi doğru değil. Aktivite A'yı bitirmezsem her şey yolunda ama geçiş bittikten sonra yapmak istiyorum. Bunu işe alamıyorum.
katma yazar Gabor Peto, kaynak

Etkinliğinizi onStop işlevinde tamamlayabilirsiniz, bunun yalnızca A'dan B'ye geçiş yaptığınızda gerçekleşmesini istiyorsanız, bir bayrak oluşturun ve startActivity'yi çağırdıktan sonra ayarlayın (ctx, intent, bundle):

@Override
public void onStop() {
    super.onStop();
    if(mShouldFinish)
         finish();
}

A aktivitesinin artık orada olmaması nedeniyle finish() işlevini çağırmak ve finishAfterTranstion() işlevini çağırmak için B etkinliğiyle işiniz bittiğinden emin olun

A aktivitesini bitirdikten sonra, B tuşuna basarsanız, B'deki paylaşılan öğe ekranda asılı kalabilir. Bundan kaçınmak için ActivityB.onEnterAnimationComplete konumunda null olarak null değerine ayarlayın.

21
katma
Bu benim için işe yaramıyor, bunu yaptığımda paylaşılan eleman geçişi doğru değil. Aktivite A'yı bitirmezsem her şey yolunda ama geçiş bittikten sonra yapmak istiyorum. Bunu işe alamıyorum.
katma yazar Gabor Peto, kaynak

Bu belki geç olabilir ama aynı sorunu yaşadım. Benim için işe yarayan şey:

supportFinishAfterTransition();

Bu, destek kütüphanesine dahil edilir ve çekicilik gibi çalışır.

Not: supportFinishAfterTransition() 'yi çağırdığınızda finish() ' u çağırmanıza gerek yoktur.

3
katma

Bu belki geç olabilir ama aynı sorunu yaşadım. Benim için işe yarayan şey:

supportFinishAfterTransition();

Bu, destek kütüphanesine dahil edilir ve çekicilik gibi çalışır.

Not: supportFinishAfterTransition() 'yi çağırdığınızda finish() ' u çağırmanıza gerek yoktur.

3
katma

Bu belki geç olabilir ama aynı sorunu yaşadım. Benim için işe yarayan şey:

supportFinishAfterTransition();

Bu, destek kütüphanesine dahil edilir ve çekicilik gibi çalışır.

Not: supportFinishAfterTransition() 'yi çağırdığınızda finish() ' u çağırmanıza gerek yoktur.

3
katma

5,0 ve üzeri sürümlerde finishAfterTransition() yöntemini deneyin.

2
katma