teneur
La deuxième partie de l'effet d'échantillon
Chapitre 1 Aperçu
Tout d'abord, posez une question, qu'est-ce que Fragment ?
Le fragment est un fragment d'interface utilisateur qui peut être intégré à l'activité. Il peut permettre au programme d'utiliser de manière plus raisonnable et complète l'espace grand écran , car il est largement utilisé sur la tablette.
Vous êtes peut-être un peu confus ici, que diable? Voici un exemple : Imaginons que nous développions une page qui utilise RecyclerView pour afficher un ensemble de titres d'actualité. Lorsque l'un des titres est cliqué, une autre interface s'ouvre pour afficher les détails de l'actualité . S'il est conçu dans un téléphone mobile, nous pouvons mettre la liste des titres de l'actualité dans une activité et les détails de l'actualité dans une autre activité, comme le montre la figure.
Cela ne semble pas être un problème, mais lorsque nous déplaçons le code source sur la tablette, le titre de l'actualité s'étendra sur tout l'écran (très moche) et il y aura une grande zone vide . Comme le montre la figure :
Par conséquent, lors du développement, utilisez Fragment raisonnablement pour réduire les coûts de code.
Par conséquent, une meilleure solution consiste à placer l'interface de liste de titres et l'interface de contenu détaillé dans deux fragments respectivement, puis à introduire ces deux fragments dans la même activité, afin que l'espace de l'écran puisse être pleinement utilisé. Comme le montre la figure :
La deuxième partie de l'effet d'échantillon
Alors, comment utiliser ce Fragment ? Voyons d'abord l'effet de l'échantillon :
Créez d'abord un Fragment (Blank) appelé BlankFragment . À ce stade, AS créera automatiquement un fichier appelé fragment_blank.xml. Dans le fichier fragment_blank.xml, nous écrivons un contrôle de texte (TextView) et un contrôle de bouton (Button) :
<TextView
android:id="@+id/textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="到底要选那个呢?"
android:gravity="center"
android:textSize="40sp"/>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是按钮"
android:layout_gravity="center" />
Nous écrivons dans le fichier BlankFragment.java :
package com.example.a2241;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
public class BlankFragment extends Fragment {
private View root;
private TextView textView;
private Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (root == null){
root = inflater.inflate(R.layout.fragment_blank,container,false);
}// 这里 inflater.inflate 的用法可以看看这位大佬写的讲解
// https://www.cnblogs.com/qinaidexin/p/11726296.html
textView = root.findViewById(R.id.textview);// 得到id textview
button = root.findViewById(R.id.btn); // 得到id btn
button.setOnClickListener(new View.OnClickListener() {// 设置按钮的点击效果事件
@Override
public void onClick(View view) {
textView.setText("发生什么事了?");
}
});
return root;
}
}
Écrivez dans le fichier Acticity_main.xml :
<fragment android:name="com.example.a2241.BlankFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment"/>
Ici, nous pouvons voir que seul un fragment est défini ici, comment peut-il y avoir un tel effet ? La compréhension personnelle ici est de renvoyer fragment_blank.xml à Acticity_main.xml puis de l'afficher (en cas d'erreur, veuillez envoyer un message privé pour obtenir des conseils).
Le troisième cycle de vie
Grâce à ce qui précède, nous connaissons l'utilisation de Fragment, examinons le cycle de vie de Fragment.
Il existe quatre types de cycle de vie d'activité : l'état d'exécution, l'état de pause, l'état d'arrêt et l'état de destruction .
Le cycle de vie du fragment comprend l'état d'exécution, l'état suspendu, l'état arrêté et l'état détruit . Comme le montre la figure :
Fonctions de onAttach() et onDetach() : L'exécution de Fragment doit dépendre de l'Activity. S'il n'y a pas d'Activity, il n'y aura pas de Fragment. Comment identifier s'ils sont liés ? Le rôle de onAttach() est de lier, et le rôle de onDetach() est de délier.
Le rôle de onCreate() et onDestroy() : onCreate() Création de Fragment, onDestroy() Destruction de Fragment.
Le rôle de onCreateView() et onDestroyView() : onCreateView() crée Fragment UI, et onDestroyView() détruit Fragment UI.
onActivityCreate() Fonction : Signifie que l'activité est créée.
Il ne reste plus qu'à : démarrer, redémarrer, mettre en pause, arrêter.
Regardons le cycle de vie :
Toujours le projet à l'instant, nous continuons à écrire du code dans le fichier BlankFragment.java :
package com.example.a2241;
import static androidx.constraintlayout.motion.utils.Oscillator.TAG;
import android.content.Context;
import android.nfc.Tag;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
public class BlankFragment extends Fragment {
private View root;
private TextView textView;
private Button button;
// private String string = "1";
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,"onCreate: ");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (root == null){
root = inflater.inflate(R.layout.fragment_blank,container,false);
}// 这里 inflater.inflate 的用法可以看看这位大佬写的讲解
// https://www.cnblogs.com/qinaidexin/p/11726296.html
textView = root.findViewById(R.id.textview);// 得到id textview
button = root.findViewById(R.id.btn); // 得到id btn
button.setOnClickListener(new View.OnClickListener() {// 设置按钮的点击效果事件
@Override
public void onClick(View view) {
textView.setText("发生什么事了?");
}
});
Log.d(TAG,"onCreateView: ");
return root;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.d(TAG, "onActivityCreated: ");
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume: ");
}
@Override
public void onStart() {
super.onStart();
Log.d(TAG, "onStart: ");
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG, "onPause: ");
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG, "onStop: ");
}
@Override
public void onDestroyView() {
super.onDestroyView();
Log.d(TAG, "onDestroyView: ");
}
@Override
public void onDetach() {
super.onDetach();
Log.d(TAG, "onDetach: ");
}
}
Nous cliquons sur le bouton Exécuter. Ouvrez logcat pour jeter un œil.
Une application de démarrage appellera. onCreate, onCreate, onActivityCreated, onStart, onResume .
Donnez la conclusion directement (le code ne sera pas affiché un par un)
Section 4 Effets pratiques
Jetons un coup d'œil à l'effet pratique (effet de changement de page simple):
Ici, ma séquence de clics est : bouton 1 deux fois, bouton 2 deux fois, bouton 1 ci-dessous, bouton 2 une fois.
La séquence d'appui sur la touche retour est la suivante : bouton 1, bouton 2, bouton 2, bouton 2, bouton 2 .
Alors comment y parvenir ?
Créez deux fragments BlankFragment (Blank), l'un s'appelle BlankFragment1 et l'autre s'appelle BlankFragment2.
BlankFragment1 créera le fichier fragment_blank1.xml. Nous écrivons directement le code:
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="我是第一个界面"
android:textSize="30sp"/>
Il en va de même pour fragment_blank2.xml :
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="我是第二个界面"
android:textSize="30sp" />
Écrivez dans activity_main.xml :
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn1"
android:text="@string/_1"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn2"
android:text="@string/_2"/>
<FrameLayout
android:id="@+id/fragme_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/teal_200" />
Écrivez le code dans MainActivity.java :
package com.example.a2022330;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.example.a2022330.placeholder.BlankFragment2;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.btn1);
button.setOnClickListener(this);
Button button1 = findViewById(R.id.btn2);
button1.setOnClickListener(this);
}
public void onClick(View view){
switch (view.getId()){
case R.id.btn1:
replaceFragment(new BlankFragment1());//创建 BlankFragment1()
break;
case R.id.btn2:
replaceFragment(new BlankFragment2());
break;
}
}
private void replaceFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.fragme_layout,fragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
Cliquez simplement sur Exécuter.
J'ai fini d'écrire, si vous trouvez cet article utile, vous pouvez faire attention,
(il y en aura un autre demain), (peut-être pas finir d'écrire, woo woo woo). Je suis allé manger, hhh~