一、Fragment的概述
Fragment是Android中的一种UI组件,可以被称为“Activity的子Activity”,因为一个Activity可以有多个Fragment,Fragment可以嵌套在Activity的布局中,且可以动态加载、替换、添加、删除等操作。
二、Fragment的创建方式
在Android中,Fragment有两种创建方式:静态创建方式和动态创建方式。
1. 静态创建方式
静态创建方式即在xml布局中直接定义Fragment,可以在Activity的xml布局文件中通过
<fragment
android:name="com.example.fragmentdemo.Fragment1"
android:id="@+id/fragment1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
其中,android:name属性指定Fragment的类名,android:id属性用于在Java代码中找到这个Fragment,其他属性用于指定布局大小、位置等。
2. 动态创建方式
动态创建方式是指通过Java代码动态创建Fragment,一般需要在Activity的onCreate()方法中调用FragmentManager的方式来实现。
创建步骤如下:
- 创建Fragment类
- 创建Fragment的布局文件
- 在Activity中创建FragmentManager对象
- 创建FragmentTransaction对象
- 绑定Fragment和布局文件
- 提交FragmentTransaction
示例1:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Fragment1 fragment1 = new Fragment1();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(R.id.fragment_container, fragment1);
transaction.commit();
}
}
在这个示例中,我们首先创建了一个Fragment1的对象,然后获取Activity的FragmentManager对象,创建FragmentTransaction对象,接着我们绑定了Fragment1和布局文件,最后提交了Transaction。
3. Fragment的生命周期
关于Fragment生命周期,大家可以参考官方文档,这里不再展开说明。
三、总结
本文介绍了Android中Fragment的两种创建方式,分别是静态创建方式和动态创建方式,介绍了它们的使用方法以及示例代码,并提供了对应的布局文件。当然,我们也简述了Fragment的生命周期。
示例2:
public class MainActivity extends AppCompatActivity {
Fragment2 fragment2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragment2 = Fragment2.newInstance("fragment参数");
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(R.id.fragment_container, fragment2);
transaction.commit();
}
/**
* 通过接口回调获取fragment2的参数值
* @param str
*/
public void getValueFromFragment(String str){
Toast.makeText(this, "来自Fragment的参数值:"+str, Toast.LENGTH_SHORT).show();
}
}
public class Fragment2 extends Fragment {
private static final String ARG_PARAM = "param";
private String mParam;
private OnFragmentInteractionListener mListener;
public Fragment2() {
// Required empty public constructor
}
public static Fragment2 newInstance(String param) {
Fragment2 fragment = new Fragment2();
Bundle args = new Bundle();
args.putString(ARG_PARAM, param);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam = getArguments().getString(ARG_PARAM);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_fragment2, container, false);
TextView textView = view.findViewById(R.id.tv_frag);
textView.setText(mParam);
Button button = view.findViewById(R.id.btn_to_activity);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mListener!=null){
mListener.onFragmentInteraction("来自Fragment的参数值:动态创建+接口回调");
}
}
});
return view;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnFragmentInteractionListener {
void onFragmentInteraction(String str);
}
}
在这个示例中,我们通过newInstance()方法传递了fragment的参数,然后我们在Fragment中动态的显示该参数,此外我们还通过interface定义了一个接口回调,将fragment的参数值传回到了Activity中。
以上就是关于Android中Fragment的两种创建方式详细讲解,希望对大家了解Fragment有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Android中Fragment的两种创建方式 - Python技术站