Android Fragment use items

to sum up:

1, add overwrite the original fragment, added to a new fragment after the original fragment still alive

2, replace is to remove all the fragment out of the same id, then add the current fragment

From the performance, it is recommended to use replace ( in doubt, then under study )

1, add, replace, regardless of whether or not to add addToBackStack, would walk again fragment of the cycle;

2, FragmentA and FragmentB switch replace the same fragment is not going to take the life cycle.

3, FragmentA switch and replace FragmentB not add addToBackStack, every time the current fragment to be destroyed, and then add a new fragment, take all life cycle.

4, FragmentA and FragmentB switched replace add addToBackStack, will not destroy the current fragment.

First, the life cycle

Second, the difference add, replace, show, hide method

Call the add method

 getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment, homeFragmentA)
                .commit();

Call and replace methods 

        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment, homeFragmentA)
                .commit();

 

add, replace, regardless of whether or not to add addToBackStack, logs are as follows: 

 com.heima.mynewdemo E/HomeFragmentA====: onAttach
 com.heima.mynewdemo E/HomeFragmentA====: onCreate
 com.heima.mynewdemo E/HomeFragmentA====: onCreateView
 com.heima.mynewdemo E/HomeFragmentA====: onActivityCreated
 com.heima.mynewdemo E/HomeFragmentA====: onStart
 com.heima.mynewdemo E/HomeFragmentA====: onResume
 com.heima.mynewdemo E/HomeFragmentA====: onPause
 com.heima.mynewdemo E/HomeFragmentA====: onStop
 com.heima.mynewdemo E/HomeFragmentA====: onDestroyView
 com.heima.mynewdemo E/HomeFragmentA====: onDestroy
 com.heima.mynewdemo E/HomeFragmentA====: onDetach

Replace the use of homeFragmentA, homeFragmentB switch:

1, replace the same fragment is not going to take the life cycle.

2, using the replace switch

        homeFragmentA = new HomeFragmentA();
        homeFragmentB = new HomeFragmentB();

        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment, homeFragmentA)
                .commit();

        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "添加", Toast.LENGTH_SHORT).show();
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.fragment, homeFragmentA, "homeFragment")
                        .commit();

            }
        });
        findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.fragment, homeFragmentB)
                        .commit();
            }
        });
    }

Log is as follows: 

2020-03-26 09:17:18.620 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onAttach
2020-03-26 09:17:18.620 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onCreate
2020-03-26 09:17:18.621 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onCreateView
2020-03-26 09:17:18.622 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onActivityCreated
2020-03-26 09:17:18.622 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onStart
2020-03-26 09:17:18.623 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onResume
2020-03-26 09:17:25.818 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onAttach
2020-03-26 09:17:25.818 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onCreate
2020-03-26 09:17:25.819 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onPause
2020-03-26 09:17:25.819 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onStop
2020-03-26 09:17:25.819 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onDestroyView
2020-03-26 09:17:25.821 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onDestroy
2020-03-26 09:17:25.821 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onDetach
2020-03-26 09:17:25.823 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onCreateView
2020-03-26 09:17:25.823 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onActivityCreated
2020-03-26 09:17:25.823 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onStart
2020-03-26 09:17:25.823 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onResume
2020-03-26 09:17:34.905 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onAttach
2020-03-26 09:17:34.905 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onCreate
2020-03-26 09:17:34.906 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onPause
2020-03-26 09:17:34.906 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onStop
2020-03-26 09:17:34.906 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onDestroyView
2020-03-26 09:17:34.907 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onDestroy
2020-03-26 09:17:34.907 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onDetach
2020-03-26 09:17:34.914 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onCreateView
2020-03-26 09:17:34.914 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onActivityCreated
2020-03-26 09:17:34.914 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onStart
2020-03-26 09:17:34.914 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onResume

Summary: every time the current fragment to be destroyed, and then add a new fragment, take all life cycle: 

3. Add addToBackStack

        homeFragmentA = new HomeFragmentA();
        homeFragmentB = new HomeFragmentB();

        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment, homeFragmentA)
                .addToBackStack(null)
                .commit();

        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "添加", Toast.LENGTH_SHORT).show();
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.fragment, homeFragmentA, "homeFragment")
                        .addToBackStack(null)
                        .commit();

            }
        });
        findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.fragment, homeFragmentB)
                        .addToBackStack(null)
                        .commit();
            }
        });
    }

Log is as follows: 

2020-03-26 09:22:53.012 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onAttach
2020-03-26 09:22:53.012 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onCreate
2020-03-26 09:22:53.013 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onCreateView
2020-03-26 09:22:53.014 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onActivityCreated
2020-03-26 09:22:53.014 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onStart
2020-03-26 09:22:53.015 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onResume
2020-03-26 09:23:10.081 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onAttach
2020-03-26 09:23:10.081 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onCreate
2020-03-26 09:23:10.081 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onPause
2020-03-26 09:23:10.082 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onStop
2020-03-26 09:23:10.082 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onDestroyView
2020-03-26 09:23:10.085 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onCreateView
2020-03-26 09:23:10.085 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onActivityCreated
2020-03-26 09:23:10.085 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onStart
2020-03-26 09:23:10.085 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onResume
2020-03-26 09:23:44.288 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onPause
2020-03-26 09:23:44.288 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onStop
2020-03-26 09:23:44.288 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onDestroyView
2020-03-26 09:23:44.290 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onCreateView
2020-03-26 09:23:44.291 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onActivityCreated
2020-03-26 09:23:44.291 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onStart
2020-03-26 09:23:44.291 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onResume

Summary: fragment that has been created will not be destroyed;

4, add, with the hide, show use


        homeFragmentA = new HomeFragmentA();
        homeFragmentB = new HomeFragmentB();
        getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment, homeFragmentA)
                .add(R.id.fragment, homeFragmentB)
                .show(homeFragmentA)
                .hide(homeFragmentB)
//                .addToBackStack(null)
                .commit();

        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "添加A", Toast.LENGTH_SHORT).show();
                getSupportFragmentManager().beginTransaction()
                        .show(homeFragmentA)
                        .hide(homeFragmentB)
//                        .addToBackStack(null)
                        .commit();

            }
        });
        findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "添加B", Toast.LENGTH_SHORT).show();
                getSupportFragmentManager().beginTransaction()
                        .show(homeFragmentB)
                        .hide(homeFragmentA)
//                        .addToBackStack(null)
                        .commit();
            }
        });
    }

Log is as follows:

2020-03-26 09:42:58.790 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onAttach
2020-03-26 09:42:58.790 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onCreate
2020-03-26 09:42:58.791 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onAttach
2020-03-26 09:42:58.791 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onCreate
2020-03-26 09:42:58.792 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onCreateView
2020-03-26 09:42:58.792 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onActivityCreated
2020-03-26 09:42:58.793 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onCreateView
2020-03-26 09:42:58.793 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onActivityCreated
2020-03-26 09:42:58.793 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onStart
2020-03-26 09:42:58.793 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onStart
2020-03-26 09:42:58.795 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onResume
2020-03-26 09:42:58.795 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onResume
2020-03-26 09:43:05.875 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onPause
2020-03-26 09:43:05.875 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onPause
2020-03-26 09:43:06.315 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onStop
2020-03-26 09:43:06.316 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onStop
2020-03-26 09:43:06.317 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onDestroyView
2020-03-26 09:43:06.318 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onDestroy
2020-03-26 09:43:06.318 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onDetach
2020-03-26 09:43:06.319 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onDestroyView
2020-03-26 09:43:06.319 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onDestroy
2020-03-26 09:43:06.319 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onDetach

Third, the basic use of Fragment

1 Notes AndroidX in Fragment use, Activity must inherit AppCompatActivity, use getSupportFragmentManager ()

2 Notes Fragment used in Android, Activity must inherit Activity, use getFragmentManager ()

package com.heima.googledemo;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;


public class MainActivity extends AppCompatActivity {
    private ImageView image;
    private TextView text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        text = findViewById(R.id.text);
        text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
        //Android
        getFragmentManager().beginTransaction()
                .add(R.id.fragment_container, homeFragment)
                .add(R.id.fragment_container, homeFragmentB)
                .show(homeFragment)
                .hide(homeFragmentB)
                .addToBackStack(null)
                .commit();


        //AndroidX
        getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment, homeFragment)
                .add(R.id.fragment, homeFragmentB)
                .show(homeFragment)
                .hide(homeFragmentB)
                .addToBackStack(null)
                .commit();
            }
        });
    }
}

 

Four, Fragment communication with Activity

1, obtain the View Activity in the Fragment

View view = getActivity().findViewById(R.id.text)

2. Similarly, you can also use the Activity findFragmentById()or findFragmentByTag()from through FragmentManagerthe acquisition of Fragmentmethod segment to call references. Or using the new object call method, for example:

 ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager (). findFragmentById ( R . id .example_fragment ); 

 

 

 

 

 

Published 49 original articles · won praise 2 · Views 8595

Guess you like

Origin blog.csdn.net/yangjunjin/article/details/104716412