Android的Fragment

fragment几个重要的方法解释

  • onAttach()当片段连接到活动时调用。
  • onCreate()被调用来进行片段的初始创建。
  • onCreateView()一旦 Fragment 应该膨胀视图,Android 就会调用它。
  • onViewCreated()在之后调用onCreateView()并确保片段的根视图是non-null. 任何视图设置都应该在这里进行。例如,查看查找、附加侦听器。
  • onActivityCreated()当宿主活动完成其onCreate()方法时调用。
  • onStart()一旦片段准备好显示在屏幕上,就会被调用。
  • onResume()- 分配“昂贵”的资源,例如注册位置、传感器更新等。
  • onPause()- 释放“昂贵”的资源。提交任何更改。
  • onDestroyView()当片段的视图被销毁时调用,但片段仍然保留在周围。
  • onDestroy()当片段不再使用时调用。
  • onDetach()当片段不再连接到活动时称为。
    image

Fragment的方法常用

public class FilmFragment extends Fragment {
    private AppCompatActivity listener;
    private List<String> mData;

    public static Fragment newInstance(String href) {
        FilmFragment fragment = new FilmFragment();
        Bundle args = new Bundle();
        args.putString("href",href);
        fragment.setArguments(args);//传递初始参数
        return fragment;
    }

    /**
     * 关联到了Activity
     * @param context
     */
    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        //下面用处常用于Activity和Fragment之间进行通信(拿到了Activity的实例就可以让Fragment向Activity发送数据)
        if (context instanceof AppCompatActivity){
            this.listener = (AppCompatActivity) context;
        }
    }

    /**
     * 用于进行Fragment某些属性的初始化,此时视图还没有创建好,所以可以初始化数据和适配器
     * @param savedInstanceState
     */
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mData = new ArrayList<>();
        getArguments().getString("href");
    }

    /**
     * 创建Fragment中的视图
     * @param inflater
     * @param container
     * @param savedInstanceState
     * @return
     */
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_file,container,false);
    }

    /**
     * 可以 findViewById
     * @param view
     * @param savedInstanceState
     */
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        RecyclerView rv = view.findViewById(R.id.rv);
    }

    /**
     * Activity和Fragment脱离关联
     */
    @Override
    public void onDetach() {
        super.onDetach();
        listener = null;
    }

    /**
     * Activity创建好了,可以拿到其控件了
     * @param savedInstanceState
     */
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }
}

在Activity中拿到相应的Fragment

        //使用替换时的tag
        getSupportFragmentManager().findFragmentByTag("tag");

替换布局(此时上一个Fragment会执行onStop和onDestroy)

        getSupportFragmentManager().beginTransaction().replace(R.id.fl_main,fragment,"tag").commit();

替换布局(此时不销毁上一个Fragment)

        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        if (fragment.isAdded()){
            ft.show(fragment);
        }else{
            ft.add(fragment,"tag");
        }
        ft.commit();
posted @ 2022-09-13 18:19  呢哇哦比较  阅读(80)  评论(0)    收藏  举报