contente
A segunda parte do efeito de amostra
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~