[JAVA] Causes techniques et contre-mesures pour les points accro aux applications Android et Kotlin (1. Traitement de la transition d'écran Android (fragment))

1. 1. * Traitement de la transition d'écran (fragment) Android *

Dans la version initiale d'Android *, il n'y avait pas de concept de fragment, et il semble qu'il était difficile de contrôler l'activité graisseuse et la rotation terminale. Dans cette application, la configuration de fragment pour chaque écran est remplacée par l'activité principale et le contrôle est omis en interdisant la rotation du terminal dans le paramètre * AndroidManifest.xml *. La possibilité que * UX * soit altérée en interdisant la rotation du terminal a été résolue en incorporant un processus de rotation de l'image. (J'en suis accro plus tard ...)

1.1 Processus de collage de l'image après la transition d'écran

Dans cette application, afin de combiner de manière transparente deux images, sélectionnez l'image d'origine à combiner (** voulez ) sur la première image, et combinez ( voulez **) l'image de destination sur la deuxième image. Choisir. (L'état de deux images est géré par * FragmentA * et * FragmentB *) Par conséquent, après avoir touché le bouton de sélection d'image pour prendre une photo de la galerie ou d'un appareil photo, l'image est collée après la transition d'écran.

<Problème>

Après avoir touché le bouton de sélection d'image pour prendre une photo de la galerie ou de l'appareil photo, l'image n'est pas affichée dans * ImageView * sur la disposition de destination de transition d'écran et une exception se produit.

Afin d'afficher l'image dans * ImageView * sur la disposition de destination de transition d'écran, le fragment chargé dans la file d'attente de transaction est exécuté immédiatement, donc * FragmentManager * traitement de transaction de fragment (* commit () *) immédiatement après * En appelant executePendingTransactions () *, * onCreateView () * sera appelé et la mise en page sera générée.

Fragmenter le traitement et l'exécution des transactions()


// .....Abréviation
	FragmentA.newInstance().let { fragment ->
		fragmentManager?.beginTransaction().let { trans ->
			val fragments = fragmentManager?.fragments ?: return
			for (rFragment in fragments) {
				trans?.remove(rFragment)
			}
			trans?.replace(R.id.topContainer, fragment, FragmentA.TAG)
			trans?.commit()
			fragmentManager?.executePendingTransactions()
			fragment.setImageView(intent) //Appel après l'exécution de toutes les files d'attente de transactions
		}
	}
// .....Abréviation

1.2 Traitement de l'affichage d'image d'animation pendant la composition d'image transparente après la transition d'écran

Dans cette application, deux images d'image (image originale combinée (** souhaite ) et image de destination composite ( souhaite **)) sont sélectionnées, et les images d'image sont combinées de manière transparente après la transition d'écran. Puisqu'il y a une différence dans la durée de composition en fonction de la taille de l'image, ajustez l'heure dans l'affichage de l'image animée.

<Problème>

Après le blocage jusqu'à ce que la composition transparente de l'image de l'image soit terminée au * lancement * (fil séparé) de Kotlin * collout lors de l'affichage de l'image d'animation, il n'est pas possible de passer à l'écran de résultat de composition transparente par le traitement de transaction de fragment.

Une erreur s'est produite dans la synchronisation du blocage pour le thread principal (* UI *) dans le contrôle jusqu'à la transition vers l'écran de résultat de composition transparente, et il n'a pas été possible de passer à l'écran de résultat de composition transparente par le traitement de transaction de fragment.

Pendant que l'image d'animation est affichée, elle sera bloquée jusqu'à ce que la composition transparente de l'image d'image soit terminée au * lancement * (fil séparé) de * Kotlin * collout, puis la transition vers l'écran de résultat de la composition transparente sera effectuée dans * Activity # runOnUiThread *.

Traitement des blocs de lancement Corroutine


// .....Abréviation
	GlobalScope.launch { // Kotlin1.3 correspondance
		launch { //GlobalScope en option
			asyncFunc(argument).join()
		}.join()
		activity?.runOnUiThread {
			//Traitement des transactions par fragments
		}
	}
// .....Abréviation

Fonction de suspension


// .....Abréviation
	private fun asyncFunc(argument): Job {
		return GlobalScope.launch { // Kotlin1.3 correspondance
			seamlesscollage(argument)
		}
	}
// .....Abréviation

1.3 Traitement de la pile arrière sur l'écran de résultat de composition transparente

Dans cette application, appuyez sur le bouton [Accueil] sur l'écran des résultats de composition homogène pour passer à l'écran d'accueil (supérieur).

<Problème>

Après avoir touché le bouton [Accueil] sur l'écran de résultat de la composition homogène et la superposition arrière, la sélection d'image n'est pas initialisée.

Puisque * addToBackStack () * a été appelé dans le traitement de transaction de fragment pour la pile arrière, si vous touchez le bouton [Accueil](appelez * popBackStack () *) sur l'écran de résultat de composition transparente, le nombre de fois où la transaction de fragment a été utilisée et la pile arrière Le statut tel que le statut de transition d'écran n'a pas été initialisé car le nombre d'entrées n'est pas le même.

onViewCreated()Quand[domicile]Traitement des boutons


// .....Abréviation
	override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
		super.onViewCreated(view, savedInstanceState)
// .....Abréviation
		homeButton.setOnClickListener {
			backHome()
		}
	}

	private fun backHome() {
// .....Abréviation
		replaceTopFragment()
	}
// .....Abréviation

Traitement des transactions par fragments (remplacer)())


// .....Abréviation
	private fun replaceTopFragment() {
		TopFragment.newInstance().let { fragment ->
			fragment.arguments?.putInt(TopFragment.FLG_VIEW, 0)
			fragmentManager?.beginTransaction().let { trans ->
				trans?.replace(R.id.topContainer, fragment, TopFragment.TAG)
				trans?.commit()
			}
		}
	}
// .....Abréviation

Lien

Causes techniques et contre-mesures pour la première application Android et la dépendance à Kotlin 2. Traitement lié à la fonction de la caméra Android 3. Traitement lié aux images Android

Recommended Posts

Causes techniques et contre-mesures pour les points accro aux applications Android et Kotlin (1. Traitement de la transition d'écran Android (fragment))
Causes techniques et contre-mesures pour les points accro aux applications Android et Kotlin (3. Traitement lié aux images Android)
Causes techniques et contre-mesures pour les points auxquels j'étais accro avec la première application Android et Kotlin
Causes techniques et contre-mesures pour les points auxquels j'étais accro avec l'application Android et Kotlin (2. Traitement lié à la fonction caméra d'Android *)
[Android / Java] Transition d'écran et traitement de retour par fragments
Convertir toutes les applications Android (Java) en Kotlin
Résumé des bons points et des précautions lors de la conversion de l'application Java Android vers Kotlin
Spécifier les options de compilation Java / Kotlin pour les applications Android