Fragment在Android中被用来增加Activity在不同屏幕的适配性以及灵活性的,它可以看作Activity的组件
创建Fragment
要创建一个Fragment,需要先创建一个Fragment的子类(或者继承它的子类)。
常见的子类:
DialogFragment
ListFragment
PreferenceFragment
将Fragment添加到Activity中有两种方式:
1.在Activity布局中声明Fragment
在MainActivity布局中加入fragment
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<fragment
android:id="@+id/content_fragment"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
android:name="com.example.com.fragment_test.ContextFragment"/>
<fragment
android:id="@+id/titlr_fragment"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="3"
android:name="com.example.com.fragment_test.TitleFragment"/>
</LinearLayout>
为两个fragment新建布局文件(在其中写入需要的界面):
context_layout.xml
title_layout.xml
新建Java文件(继承Fragment,重写onCreatView()方法):
public class TitleFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view=inflater.inflate(R.layout.title_layout,container,false); return view; } }
在MainActivity中获取实例:
TitleFragment titleFragment;
ContextFragment contextFragment;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过FragmentManager(Fragment管理器)
contextFragment= (ContextFragment) getFragmentManager().findFragmentById(R.id.content_fragment);
titleFragment= (TitleFragment) getFragmentManager().findFragmentById(R.id.title_fragment);
}
2.通过编码将Fragment添加到已有的ViewGroup
只在MainActicity中有不同:
<pre style="font-family: 宋体; font-size: 15pt; background-color: rgb(255, 255, 255);"><pre name="code" class="java">public class Main2Activity extends AppCompatActivity {
ContextFragment contextFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
addcontentLayout();
}
/**
*通过代码添加Fragment
*/
private void addcontentLayout(){
FragmentManager fm=getFragmentManager();
//开启一个事务
FragmentTransaction ft=fm.beginTransaction();
contextFragment=new ContextFragment();
ft.add(R.id.Content_fragment,contextFragment);//添加Fragment
ft.commit();//提交
}
}