Tutorial de primeiros passos do Android | Fragmento (método de carregamento e comunicação)

Insira a descrição da imagem aqui

Método de carregamento de fragmentos

Existem duas maneiras de carregar

  • Cadastre-se no arquivo xml
  • Carregar em código Java

Cadastre-se em xml :

Por exemplo, fragment_demo.xmldefinido em

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <fragment
        android:id="@+id/main_fragment_up"
        android:name="com.rust.fragment.FirstFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <fragment
        android:id="@+id/main_fragment_bottom"
        android:name="com.rust.fragment.SecondFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</LinearLayout>

com.rust.fragment.SecondFragmentOu seja, a subclasse Fragment SecondFragment.javasubstitui onCreateViewo método e retorna a visualização definida.

Basta carregá-lo diretamente na atividade

setContentView(R.layout.fragment_demo);

Carregando em código Java

① Prepare o arquivo de layout xml do Fragment ② Crie uma nova classe, herdada do Fragment; encontre o arquivo de layout do Fragment nesta classe ③ Use o FragmentManager na Activity para operar o Fragment ④ Não se esqueça de confirmar

Primeiro personalize um arquivo de layoutfragment_first.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#0011ff" >
<!-- <Button
    android:id="@+id/btn_fragment1_1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btn_fragment1"
    android:textSize="16sp"
       />
<EditText
    /> -->
</LinearLayout>

Crie uma nova classe FirstFragment.javaque herda de Fragment. Método de cópia onCreateView. No onCreateViewmétodo, você pode operar os controles no Fragmento.

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    
    
        View rootView = inflater.inflate(R.layout.fragment_first, container,false);
//    fragment_first是自定义好的布局
//    如果此Fragment上放了控件,比如Button,Edittext等。可以在这里定义动作
  btn_fragment1_send = (Button) rootView.findViewById(R.id.btn_fragment1_1);
//...
        return rootView;
    }

Prepare uma posição para Fragment, como activity_main.xmlusar Framelayout para ocupar a posição.

    <FrameLayout
        android:id="@+id/layout_container1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4" >
    </FrameLayout>

Em MainActivity.java, primeiro obtenha o FragmentManager e depois o FragmentTransaction. Operações como adição e exclusão de Fragment são concluídas por FragmentTransaction.

f1 = new FirstFragment();    //    获取实例
f2 = new SecondFragment();    //
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.layout_container1,f1);    //    添加
fragmentTransaction.replace(R.id.layout_container1,f1);    //    替换
// 或者也可以写成
fragmentTransaction.replace(R.id.layout_container1,new FirstFragment());
//              fragmentTransaction.addToBackStack(null);   //添加到返回栈,这样按返回键的时候能返回已添加的fragment
fragmentTransaction.commit();    //别忘了commit
//    移除操作 getFragmentManager().beginTransaction().remove(f1).commit();

Comparado ao registro em xml, o carregamento do código é mais flexível. Pessoalmente, prefiro o carregamento dinâmico.

Cooperação entre Fragmento e Atividade

A atividade é executada primeiro onResumee, em seguida, o onResumefragmento atual é executado. O fragmento atual é substituído e, quando é substituído novamente, alguns estados não são reinicializados. Quando a substituição for executada, o ciclo de declaração do Fragmento será executado novamente. Uma abordagem segura é onCreateViewinicializar as variáveis ​​necessárias no . Por exemplo, redefina alguns valores de status. É necessária atenção especial ao alternar entre vários fragmentos.

Comunicação entre Fragmentos

No arquivo java do Fragment, você pode usar getActivity()para obter a atividade que o chama e, em seguida, encontrar outro Fragment para se comunicar

getActivity().getFragmentManager().findFragmentById(R.id.fragment_list);

No entanto, este acoplamento é demasiado elevado e é inconveniente para operações de modificação subsequentes.

A comunicação entre um Fragmento e sua Atividade anexada deve ser completada pela Atividade; não pode ser uma comunicação direta entre vários Fragmentos.

Método de comunicação entre o Fragment e sua atividade anexada:
  • Defina uma interface no Fragment que inicia o evento e declare seus métodos na interface
  • Exigir que Activity implemente esta interface no método onAttach
  • Implemente este método na atividade

Por exemplo, dois Fragmentos estão dispostos em uma atividade e a comunicação entre eles depende da atividade.

Código:ListStoreActivity.java NewItemFragment.java ListStoreFragment.java

O arquivo de layout é:liststore.xml new_item_fragment.xml

Preparar arquivo de layout :

liststore.xmlUse LinearLayout para colocar 2 fragmentos, apontando para 2 arquivos Fragment respectivamente. new_item_fragment.xmlColoque um EditText e um botão lado a lado.

ListStoreFragment.javaUse a interface definida anteriormente

public class ListStoreFragment extends ListFragment{
    
    
/// 继承自ListFragment,已经封装好了listview
/// 不需要自己写ListView了
}

NewItemFragment.java

/**
 * 声明一个接口,定义向activity传递的方法
 * 绑定的activity必须实现这个方法
 */
    public interface OnNewItemAddedListener {
    
    
        public void newItemAdded(String content);
    }
    private OnNewItemAddedListener onNewItemAddedListener;
    private Button btnAddItem;
    /*复写onAttach方法*/
    @Override
    public void onAttach(Activity activity) {
    
    
        super.onAttach(activity);
        try {
    
    
            onNewItemAddedListener = (OnNewItemAddedListener) activity;
        } catch (ClassCastException e){
    
    
            throw new ClassCastException(activity.toString() + "must implement OnNewItemAddedListener");
        }
    }

ListStoreActivity.javaCarregue a visualização principal liststore.xml;

Dois fragmentos ListStoreActivityse comunicam através

Obtenha a instância de ListStoreFragment no método onCreate; substitua o método newItemAdded e adicione lógica de negócios nele

public class ListStoreActivity extends Activity implements OnNewItemAddedListener{
    
    

    private ArrayList<String> data;
    private ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.liststore);
        data = new ArrayList<String>();
        // 把data装入adapter中
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
        // ListFragment并不需要再定义一个listview 
        ListStoreFragment listStoreFragment = (ListStoreFragment) getFragmentManager().findFragmentById(R.id.fragment_listview);
        listStoreFragment.setListAdapter(adapter);
    }

    @Override
    public void newItemAdded(String content) {
    
    
        //  复写接口中的方法,业务代码在这里实现
        if(!content.equals("")) {
    
    
            data.add(content);
            adapter.notifyDataSetChanged();
        }
    }
}

A desvantagem disto é que o grau de acoplamento é muito alto

Vários métodos de comunicação entre Fragment e Activity

  • A atividade entrega seu manipulador ao Fragment
  • transmissão
  • EventBus
  • Definir interface

Além dos métodos mencionados acima, a comunicação também pode ser alcançada compartilhando ViewModel entre Activity e Fragment.

Compartilhe uma última vez

[Produzido pela equipe técnica da Tencent] Começando a usar o Android do zero até dominá-lo, tutorial de instalação do Android Studio + conjunto completo de tutoriais básicos do Android

Tutorial introdutório à programação Android

Noções básicas da linguagem Java, desde a entrada até a familiaridade

Insira a descrição da imagem aqui

Noções básicas da linguagem Kotlin, desde a entrada até a familiaridade

Insira a descrição da imagem aqui

Pilha de tecnologia Android desde a entrada até a familiaridade

Insira a descrição da imagem aqui

Aprendizagem abrangente no Android Jetpack

Insira a descrição da imagem aqui

Para iniciantes, pode ser difícil instalar o Android Studio. Você pode assistir ao vídeo a seguir para aprender como instalar e executá-lo passo a passo.

Tutorial de instalação do Android Studio

Insira a descrição da imagem aqui

Com o estágio de aprendizado Java, é recomendável focar no aprendizado por vídeo neste estágio e complementá-lo com verificação de livros e preenchimento de lacunas. Se você se concentra principalmente em livros, pode digitar o código com base nas explicações do livro, complementado por vídeos didáticos para verificar omissões e preencher lacunas. Se você encontrar problemas, você pode ir ao Baidu. Geralmente, muitas pessoas encontrarão problemas básicos e darão respostas melhores.

Você precisa dominar pontos de conhecimento básico, como usar os quatro componentes principais, como criar um serviço, como fazer o layout, visualização personalizada simples, animação, comunicação em rede e outras tecnologias comuns.

Um conjunto completo de tutoriais baseados em zero foi preparado para você. Se precisar, você pode adicionar o código QR abaixo para obtê-lo gratuitamente.

Um conjunto completo de tutoriais básicos do Android

Insira a descrição da imagem aqui

Insira a descrição da imagem aqui

Insira a descrição da imagem aqui

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/Android23333/article/details/132563179
Recomendado
Clasificación