Fragment

Fragment是一种可以嵌入在活动当中的UI片段。它的生命周期如下:

Fragment有两种添加方式,一种是静态,一种是动态,静态使用的较少。

下面是动态Fragment的使用:

动态加载

步骤一:添加一个FragmentTransaction的实例

FragmentManager fragmentManager = getSupportFragmentManager();

FragmentTransaction transaction = fragmentManager.beginTransaction();

 

步骤二:用add()方法添加Fragment对象,其中R.id.container为xml中对应Fragment存放位置的容器的id

XxxFragment xxxFragment = new XxxFragment();

transaction.add(R.id.container,xxxFragment,"xxxFragment");

// 添加回退栈

transaction.addToBackStack(null);

 

步骤三:调用commit()方法使得FragmentTransaction实例的改变生效

transaction.commit();

 

FragmentPagerAdapter与FragmentStatePagerAdapter的区别:

FragmentStatePagerAdapter每次切换viewpager时回收内存,适用于页面较多的

情况。FragmentPagerAdapter不回收内存,只进行UI分离,适合页面比较少的情况。

 

Fragment通信

1.在Fragment中调用Activity中的方法,getActivity()方法。

2.在Activity中调用Fragment中的方法:接口回调,在Fragment中创建接口,在Activity中

    实现接口。

3.在Fragment中调用Fragment中的方法,先通过getActivity()获取Activity中的方法,然后再通过findFragmentById或者findFragmentByTag获取另一个Fragment。

 

Fragment Arguments

使用Fragment启动另一个Activity:https://blog.csdn.net/myCSDN1997/article/details/83721159 详见RecyclerView使用。

使用Fragment获取其托管Activity中的数据:通过setArguments()和

getArguments()实现,具体如下所示:

1.在Fragment类中编写静态方法newInstance(Xxx xxx),参数为要获取的数据,返回一个

   当前Fragment的实例,代码如下所示:

    // 首先创建常量来表示key

    private static final String ARG_XXX = "xxx";

 

    // 编写方法newInstance(Xxx xxx)

    public static XxxFragment newInstance(Xxx xxx){

        Bundle args = new Bundle();

        args.put(ARG_XXX, xxx);

 

        XxxFragment = new XxxFragment();

        fragment.setArguments(args);

        return fragment;

    }

 

2.在Activity中添加fragment的部分的new XxxFragment()改为XxxFragment.newInstance(xxx);

 

3.获取 arguments:在Fragment类的onCreate()方法中获取值,如下:

    if (getArguments() != null) {

        Xxx xxx = (Xxx) getArguments().getXxx(ARG_XXX);

    }

 

通过 fragment 获取返回结果:可以调用Fragment的startActivityForResult()方法和Fragment的onActivityResult()方法。

注:fragment能够从activity中接收返回结果,但其自身无法持有返回结果。只有activity拥有返回结果。所以,fragment没有setResult()方法,所以要在fragment中通过getActivity().setResult(Activity.RESULT_OK, null);来设置返回结果。

 

Fragment中常用的方法:

replace()方法

add()方法

remove()方法

 

抽象Activity托管Fragment

通用型fragment托管布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Activity抽象超类来托管Fragment:

public abstract class SingleFragmentActivity extends AppCompatActivity {

protected abstract Fragment createFragment();

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

        FragmentManager fm = getSupportFragmentManager();
        Fragment fragment = fm.findFragmentById(R.id.fragment_container);

        if (fragment == null) {
            fragment = createFragment();
            fm.beginTransaction()
                .add(R.id.fragment_container, fragment)
                .commit();
            }
        }
}

Activity控制类继承抽象超类:

public class CrimeListActivity extends SingleFragmentActivity {
    @Override
    protected Fragment createFragment() {
        return new CrimeListFragment();
    }
}

实现Fragment类:

public class CrimeListFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                        Bundle savedInstanceState){
        View v = inflater.inflate(R.layout.fragment_xxx, container , false);
        // 获取实例设置监听都在该方法中
        return v;
    }
}

 

最后在配置文件中配置Activity

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值