本節介紹一個ListFragment的例子,MainActivity左邊顯示一個ListFragment,右邊是一個FrameLayout容器,該FrameLayout容器将會動态更新其中的Fragment
MainActivity布局檔案如下:
<?xml version="1.0" encoding="utf-8"?>
<!-- 定義一個水準排列的LinearLayout,并指定使用中等分隔條 -->
<LinearLayout xmlns:android="
http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:divider="?android:attr/dividerHorizontal"
android:orientation="horizontal"
android:showDividers="middle" >
<!-- 添加一個Fragment -->
<fragment
android:id="@+id/fragment_list_main"
android:name="com.example.activity.MyListFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<!-- 添加一個FrameLayout容器 -->
<FrameLayout
android:id="@+id/framelayout_content_main"
android:layout_weight="2" />
</LinearLayout>
MainActivity.java類
public class MainActivity extends Activity implements MyListFragment.Callbacks {
ContentFragment是具體的Fragment類,代碼會上傳上去
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// 實作Callbacks接口必須實作的方法
public void onItemSelected(Integer id) {
// 建立Bundle,準備向Fragment傳入參數
Bundle arguments = new Bundle();
arguments.putInt("id", id);
// 建立ContentFragment對象
ContentFragment fragment = new ContentFragment();
// 向Fragment傳入參數
fragment.setArguments(arguments);
// 使用fragment替換framelayout_content_main容器目前顯示的Fragment
getFragmentManager().beginTransaction()
.replace(R.id.framelayout_content_main, fragment).commit();
}
開發ListFragment的子類無需重寫onCreatView()方法,類似ListActivity,隻要調用ListFragment的setAdapter()方法為其設定Adapter即可。
MyListFragment.java類
public class MyListFragment extends ListFragment {
private Callbacks mCallbacks;
// 定義一個回調接口,該Fragment所在Activity需要實作該接口
// 該Fragment将通過該接口與它所在的Activity互動
public interface Callbacks {
public void onItemSelected(Integer id);
public void onCreate(Bundle savedInstanceState) {
// 為該ListFragment設定Adapter
ArrayAdapter adapter = new ArrayAdapter(getActivity(),
android.R.layout.simple_list_item_1, new String[] {
"DialogFragment", "ListFragment", "WebViewFragment",
"PreferenceFragment" });
setListAdapter(adapter);
// 當該Fragment被添加、顯示到Activity時,回調該方法
public void onAttach(Activity activity) {
super.onAttach(activity);
// 如果Activity沒有實作Callbacks接口,抛出異常
if (!(activity instanceof Callbacks)) {
throw new IllegalStateException(
"MyListFragment所在的Activity必須實作Callbacks接口!");
}
// 把該Activity當成Callbacks對象
mCallbacks = (Callbacks) activity;
// 當該Fragment從它所屬的Activity中被删除時回調該方法
public void onDetach() {
super.onDetach();
// 将mCallbacks賦為null。
mCallbacks = null;
// 當使用者點選某清單項時激發該回調方法
public void onListItemClick(ListView listView, View view, int position,
long id) {
super.onListItemClick(listView, view, position, id);
// 激發mCallbacks的onItemSelected方法
mCallbacks.onItemSelected(position);
public void setActivateOnItemClick(boolean activateOnItemClick) {
getListView().setChoiceMode(
activateOnItemClick ? ListView.CHOICE_MODE_SINGLE
: ListView.CHOICE_MODE_NONE);
源碼