Android-第八节02Fragment详解

目录

  • 一、Fragment的addToBackStack()使用
  • 二、Fragment与Activity通信
  • 三、Fragment 如何传递数据到 Activity

一、Fragment的addToBackStack()使用

官方文档介绍,这个方法的作用:
当您移除或替换一个片段并向返回栈添加事务时,系统会停止(而非销毁)移除的片段。 如果用户执行回退操作进行片段恢复,该片段将重新启动。 如果您不向返回栈添加事务,则系统会在您移除或替换片段时将其销毁。

画图帮助大家理解一下:
Android-第八节02Fragment详解_第1张图片

二、Fragment与Activity通信

从Activity向fragment发送通信
1.利用Bundle通信,在activity中创建
Android-第八节02Fragment详解_第2张图片
代码:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button_change=findViewById(R.id.btn2);
        button_change.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bundle bundle=new Bundle();      //创建bundle
                bundle.putString("msg","你好呀");  //前面是key 后面是value
                BlankFragment bk=new BlankFragment();   //创建fragment
                bk.setArguments(bundle);      //通过setArgument将bundle传递
                replaceFragment(bk);
            }
        });

        Button button_replace=findViewById(R.id.btn3);
        button_replace.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                replaceFragment(new ItemFragment());
            }
        });
    }

2.在fragment中接收
Android-第八节02Fragment详解_第3张图片
代码:

 @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle bundle=getArguments();
        String s=bundle.getString("msg");
        Log.i("tag","msg"+s);
    }

3.运行结果:

三、Fragment 如何传递数据到 Activity

  • 答:采用 接口回调 方式。
  • 接口回调 回顾
    把实现了某一接口的类所创建的对象的引用 赋给 该接口声明的变量,通过该接口变量 调用 该实现类对象的实现的接口方法。

1.activity_main.xml代码



    

    

2.fragment.xml代码




    


3.设置回调接口
该接口用于用于Activity与Fragment通信
ICallBack.java

public interface ICallBack {
    void get_message_from_Fragment(String string);

}

4.fragment代码:

public class Fragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View contentView = inflater.inflate(R.layout.fragment, container, false);
        // 设置布局文件
        return contentView;
    }

    // 设置 接口回调 方法
    public void sendMessage(ICallBack callBack){

        callBack.get_message_from_Fragment("消息:我来自Fragment");

    }
}

5.Activity核心代码:

public class MainActivity extends AppCompatActivity {

    Button button;
    TextView textview;

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

        button = findViewById(R.id.button);
        textview = findViewById(R.id.text);

        // 步骤1:获取FragmentManager
        FragmentManager fragmentManager = getFragmentManager();

        // 步骤2:获取FragmentTransaction
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        // 步骤3:创建需要添加的Fragment 
        final mFragment fragment = new mFragment();

        // 步骤4:动态添加fragment
        // 即将创建的fragment添加到Activity布局文件中定义的占位符中(FrameLayout)
        fragmentTransaction.add(R.id.fragment_container, fragment);
        fragmentTransaction.commit();


        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // 通过接口回调将消息从fragment发送到Activity
                fragment.sendMessage(new ICallBack() {
                    @Override
                    public void get_message_from_Fragment(String string) {
                            textview.setText(string);
                    }
                });

            }
        });
    }


}

运行结果:
Android-第八节02Fragment详解_第4张图片

你可能感兴趣的:(Android,Studio(入门),android,android,studio,kotlin)