[Explicação do fragmento do Android e prática simples do efeito de troca de página de histórico]

contente

Visão geral da Seção 1

A segunda parte do efeito de amostra

O terceiro ciclo de vida

Seção 4 Efeitos práticos


Visão geral da Seção 1

Antes de mais nada, faça uma pergunta, o que é Fragment?

Fragment é um fragmento de interface do usuário que pode ser incorporado em Activity. Ele pode fazer com que o programa faça uso mais razoável e completo do espaço da tela grande , porque é amplamente utilizado no tablet.

 Você pode estar um pouco confuso aqui, o que diabos? Aqui está um exemplo: Imagine que estamos desenvolvendo uma página que usa o RecyclerView para exibir um conjunto de manchetes de notícias. Quando uma das manchetes é clicada, outra interface será aberta para exibir os detalhes das notícias . Se for projetado em um celular, podemos colocar a lista de manchetes de notícias em uma atividade e os detalhes das notícias em outra atividade, conforme mostrado na figura.

Não parece um problema, mas quando movemos o código-fonte para o tablet, a manchete da notícia se estenderá por toda a tela (muito feia) e haverá uma grande área em branco . Como mostrado na figura:

Portanto, ao desenvolver, use Fragment razoavelmente para reduzir os custos de código.

Portanto, uma solução melhor é colocar a interface da lista de títulos e a interface de conteúdo detalhado em dois Fragments respectivamente e, em seguida, introduzir esses dois Fragments na mesma Activity, para que o espaço da tela possa ser totalmente utilizado. Como mostrado na figura:

A segunda parte do efeito de amostra

Então, como usar este Fragmento? Vamos dar uma olhada no efeito da amostra primeiro:

 Primeiro crie um Fragment (Blank) chamado   BlankFragment . Neste momento, o AS criará automaticamente um arquivo chamado fragment_blank.xml. No arquivo fragment_blank.xml, escrevemos um controle de texto (TextView) e um controle de botão (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" />

Escrevemos no arquivo 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;
    }
}

Escreva no arquivo Acticity_main.xml:

    <fragment android:name="com.example.a2241.BlankFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/fragment"/>

 Aqui podemos ver que apenas um fragmento é colocado aqui, como pode haver tal efeito? O entendimento pessoal aqui é encaminhar fragment_blank.xml para Acticity_main.xml e exibi-lo (se houver um erro, envie uma mensagem privada para orientação).

O terceiro ciclo de vida

Através do exposto, conhecemos o uso do Fragment, vamos dar uma olhada no ciclo de vida do Fragment.

Existem quatro tipos de ciclo de vida da atividade: estado em execução, estado pausado, estado parado e estado destruído .

O ciclo de vida do fragmento inclui estado em execução, estado suspenso, estado parado e estado destruído . Como mostrado na figura:

Funções de onAttach() e onDetach(): A execução do Fragment deve depender da Activity. Se não houver Activity, não haverá Fragment. Como identificar se eles estão vinculados? A função de onAttach() é vincular, e a função de onDetach() é desvincular.

O papel de onCreate() e onDestroy(): criação do fragmento onCreate(), destruição do fragmento onDestroy().

A função de onCreateView() e onDestroyView() : onCreateView() cria Fragment UI e onDestroyView() destrói Fragment UI.

Função onActivityCreate(): Significa que a atividade foi criada.

Tudo o que resta é : iniciar, reiniciar, pausar, parar.

Vejamos o ciclo de vida:

Ainda o projeto agora, continuamos a escrever o código no arquivo 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: ");
    }
}

Clicamos no botão executar. Abra o logcat para dar uma olhada.

Um aplicativo de inicialização irá chamar. onCreate, onCreate, onActivityCreated, onStart, onResume .

 Dê a conclusão diretamente (o código não será mostrado um a um)

Seção 4 Efeitos práticos

Vamos dar uma olhada no efeito prático (efeito de troca de página simples):

 Aqui minha sequência de cliques é: botão 1 duas vezes, botão 2 duas vezes, botão 1 abaixo, botão 2 uma vez.

A sequência de pressionar a tecla de retorno é: botão 1, botão 2, botão 2, botão 2, botão 2 .

Então, como alcançá-lo?

Crie dois Fragmentos BlankFragment (Blank), um é chamado BlankFragment1 e o outro é chamado BlankFragment2.

BlankFragment1 criará o arquivo fragment_blank1.xml. Escrevemos diretamente o código:

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="我是第一个界面"
        android:textSize="30sp"/>

O mesmo vale para fragment_blank2.xml:

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="我是第二个界面"
        android:textSize="30sp" />

Escreva em 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" />

Escreva o código em 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();
    }
}

Basta clicar em executar.

Terminado de escrever, se você achar este artigo útil, você pode prestar atenção, (haverá outro amanhã), (pode não terminar de escrever, woo woo woo) . Fui comer, hhh~

Acho que você gosta

Origin blog.csdn.net/aasd23/article/details/123901535
Recomendado
Clasificación