Android Framgment的使用

一、引包问题

app包下的fragment不兼容2.3以下的版本,v4包兼容

二、静态加载fragment

1、定义fragment的布局

2、自定义一个fragment类,需要继承fragment或者其他子类,重写onCreateView()的方法

3、在需要加载Fragment的Activity对应的布局文件中添加fragment的标签

代码如下:

<!--fragment布局-->

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#23b7ce">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="@string/app_index"/>

    </LinearLayout>

</android.support.constraint.ConstraintLayout>

 

 

新建fragment布局文件(layout下添加)

三、动态加载fragment(在Java代码中动态加载fragment,activity 不变,切换fragment)

1、获得FragmentManager对象(用来管理fragment)常用方法如下:

      beginTranscation  开始业务操作

      findFragmentBtId 根据ID找到对应的fragment

     findfragmentByTag 根据标签查找gragment

     popBackStack 调用此函数将fragment弹出栈

     addOnBackStackChangeListener 注册一个监听后台堆栈变化的Listener

2、获得FragmentTranscation对象

    对fragment进行添加、移除、替换以及执行其他操作,常用方法如下:

  add、replace、remove、hide、show、addToBackStack(按返回键返回上一个framgent)、commit(提交业务)

3、调用add方法或者replace方法加载Fragment对象

4、调用commit方法来提交事物

动态添加fragment过程:

第一步:在layout下创建两个fragment(fragment_a,Bfragment_b)

第二步:在java代码创建两个fragment的类(Afragment,Bfragment)

第三步:在主布局文件中添加fragmentlayout标签,创建两个点击按钮

第四步:在MainActivity代码中创建按钮点击的监听事件,在onclick()中动态加载fragment(先获取fragmentmanager,然后开始一个事物)

代码如下:

<?xml version="1.0" encoding="utf-8"?>       本代码为创建Afragment
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="@string/frameA"/>
    </LinearLayout>

</android.support.constraint.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>       本代码为创建bfragment
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="@string/frameB"/>

    </LinearLayout>

</android.support.constraint.ConstraintLayout>

AFragment类的创建

package com.example.administrator.motherbaby;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class AFragment extends Fragment {

    private Context mcontext;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mcontext = context;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        return inflater.inflate(R.layout.fragment_a,container,false);
        //return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        //当Fragment的视图创建完成后回调
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //做数据的处理
    }


    @Override
    public void onDestroyView() {
        super.onDestroyView();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

 

BFragment类的创建

package com.example.administrator.motherbaby;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class BFragment extends Fragment {


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_b,container,false);
        //return super.onCreateView(inflater, container, savedInstanceState);
    }
}

 

主Activity Main创建

package com.example.administrator.motherbaby;

import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button aBtn,bBtn;

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

        aBtn = (Button) findViewById(R.id.btn_a);
        bBtn = (Button) findViewById(R.id.btn_b);

        aBtn.setOnClickListener(this);
        bBtn.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        FragmentManager supportFragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
        switch (v.getId()){
            case R.id.btn_a:
                fragmentTransaction.replace(R.id.fragment_content,new AFragment());
                break;
            case R.id.btn_b:
                fragmentTransaction.replace(R.id.fragment_content,new BFragment());
                break;
        }
        fragmentTransaction.commit();

    }
}

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值