栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android 动态fragment、fragment添加到栈管理、activity与fragment的bundle通信

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android 动态fragment、fragment添加到栈管理、activity与fragment的bundle通信

fragment的介绍请点这里

一 案例:点击不同的按钮动态切换不同的fragment页面

案例效果图

 步骤

step1 创建3个fragment备用
step2 main.xml写3个按钮布局
step3 main.java  

   1 按钮点击事件的新写法
        main.java实现View.OnClickListener
        btn.setOnClickListener(this);
        重写onClick方法
    2 点击事件:动态切换fragment
        //专门管理fragment的
        FragmentManager fragmentManager = getSupportFragmentManager();
        //开启事务
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        //用第2个参数替换第1个
        transaction.replace(R.id.framelayout,fragment);
        //提交事务
        transaction.commit();
    3 一个点击事件,根据不同的button,切换不同的的fragment

代码 step1 创建3个fragment备用

把fragment的java文件这里的代码删掉,否则后期会报错

 step2 main.xml写3个按钮布局

activity_main.xml




    
        
step3 MainActivity.java
package com.example.myfragmentdong;

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

import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private Button btn;
    private Button btn2;
    private Button btn3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = findViewById(R.id.btn);
        btn.setOnClickListener(this);
        btn2 = findViewById(R.id.btn2);
        btn2.setOnClickListener(this);
        btn3 = findViewById(R.id.btn3);
        btn3.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        switch(view.getId()){
            case R.id.btn:
                replacefragement(new BlankFragment1());
                break;
            case R.id.btn2:
                replacefragement(new BlankFragment2());
                break;
            case R.id.btn3:
                replacefragement(new ItemFragment());
                break;
        }

    }

    //动态切换fragment
    private void replacefragement(Fragment fragment) {
        //专门管理fragment的
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        //用第2个替换第一个
        transaction.replace(R.id.framelayout,fragment);
        //提交事务
        transaction.commit();
    }
}
效果

 

 

二 fragment添加栈
//添加栈
        transaction.addToBackStack(null);

 添加栈前的效果

动态fragment效果

 添加栈后的效果

fragment栈后

说明:添加到栈后 返回退出时会一步步退出,不是直接退出.

三 activity与fragment的通信

原生通信:bundle

案例:activity把信息发给fragment


步骤:
1 Main.java:
    new一个Bundle,putString,fragment来setArguments(bundle)
2 Fragment.java:
    onCreate方法里 getArguments().getString("key")

代码

MainActivity.java

//通信:activity把信息发给fragment
Bundle bundle = new Bundle();
bundle.putString("message","i love android");
BlankFragment1 fragment1 = new BlankFragment1();
fragment1.setArguments(bundle);

BlankFragment1.java

@Override
    public void onCreate(Bundle savedInstanceState) {
        //获取 bundle
        Bundle bundle = getArguments();
        Log.e("cs","信息是:"+ bundle.getString("message"));
        super.onCreate(savedInstanceState);

    }

效果

activity和fragment通过接口通信的实现方法请点这里

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/946156.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号