碎片之Fragment详解

2017-07-12  本文已影响0人  kjy_112233

一、Fragment详解

生命周期.png
(1)Fragment生命周期方法

(2)加载Fragment

public class LoadingFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_loading);
        return view;
    }
}
    //在Activity布局中使用<fragment>标签添加碎片
    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.ee.cp.study.LoadingFragment"/>
    //在Activity布局添加FrameLayout控件
    <FrameLayout
        android:id="@+id/fl_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

        //在Activity中添加Fragment界面
        LoadingFragment loadingFragment = new LoadingFragment();
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.fl_fragment, loadingFragment);//fragment放到布局容器
        fragmentTransaction.addToBackStack(null);//用户通过返回键返回前一个fragment状态
        fragmentTransaction.commit();

(3)Fragment与Activity之间通信

public class LoadingFragment extends Fragment implements View.OnClickListener {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_loading);
        return view;
    }
    
    public interface FragmentOnClickListener {
        void fragmentOnClickListener();
    }

    @Override
    public void onClick(View v) {
        //交给Activity处理事件
        if (getActivity() instanceof FragmentOnClickListener)
            ((FragmentOnClickListener)getActivity()).fragmentOnClickListener();
    }
}
public class MainActivity extends AppCompatActivity implements LoadingFragment.FragmentOnClickListener {

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


    @Override
    public void fragmentOnClickListener() {

    }
}
public class LoadingFragment extends Fragment implements View.OnClickListener {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_loading);
        return view;
    }

    private FragmentOnClickListener fragmentOnClickListener;

    public interface FragmentOnClickListener {
        void fragmentOnClickListener();
    }

    public void setFragmentClickListener(FragmentOnClickListener fragmentOnClickListener) {
        this.fragmentOnClickListener = fragmentOnClickListener;
    }

    @Override
    public void onClick(View v) {
        //交给Activity处理事件
        if (fragmentOnClickListener != null)
            fragmentOnClickListener.fragmentOnClickListener();
    }
}

二、Framgnet源码解析

总结

上一篇 下一篇

猜你喜欢

热点阅读