Fragment的简单使用

Android2018年9月18日 pm7:36发布6年前 (2018)更新 3xcn.com@站长
0 1 0
广告也精彩
目录


多用几次就熟悉了。以防止忘记,因此附上代码于此。(图片来自Android官网)

零、Fragment的生命周期

Fragment的简单使用

一、布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/main_tv_message"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:gravity="center"
        android:text="@string/hello_world"
        android:textColor="@android:color/black"
        android:textSize="30sp" />

    <LinearLayout
        android:id="@+id/main_layout"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/main_bt_first"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="First Fragment" />

        <Button
            android:id="@+id/main_bt_second"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="Second Fragment" />
    </LinearLayout>

    <FrameLayout
        android:id="@+id/main_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/main_layout"
        android:layout_below="@id/main_tv_message"
        android:background="@android:color/darker_gray" >
    </FrameLayout>

</RelativeLayout>

二、FirstFragment.java

public class FirstFragment extends Fragment {

	private String TAG = "fragment";

	@Override
	public void onAttach(Activity activity) {
		// TODO Auto-generated method stub
		super.onAttach(activity);
		Log.d(TAG, "--FirstFragment------onAttach---------");
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		Log.d(TAG, "--FirstFragment------onCreate---------");
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		Log.d(TAG, "--FirstFragment------onCreateView---------");
		View view = inflater.inflate(R.layout.activity_first, null);
		return view;
	}

	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		Log.d(TAG, "--FirstFragment------onActivityCreated---------");
		super.onActivityCreated(savedInstanceState);
	}

	@Override
	public void onResume() {
		// TODO Auto-generated method stub
		Log.d(TAG, "--FirstFragment------onResume---------");
		super.onResume();
	}

	@Override
	public void onPause() {
		// TODO Auto-generated method stub
		Log.d(TAG, "--FirstFragment------onPause---------");
		super.onPause();
	}

	@Override
	public void onStart() {
		// TODO Auto-generated method stub
		Log.d(TAG, "--FirstFragment------onStart---------");
		super.onStart();
	}

	@Override
	public void onDestroyView() {
		// TODO Auto-generated method stub
		Log.d(TAG, "--FirstFragment------onDestroyView---------");
		super.onDestroyView();
	}

	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		Log.d(TAG, "--FirstFragment------onDestroy---------");
		super.onDestroy();
	}

	@Override
	public void onDetach() {
		// TODO Auto-generated method stub
		Log.d(TAG, "--FirstFragment------onDetach---------");
		super.onDetach();
	}
}

SecondFragment.java省略

三、MainActivity.java

public class MainActivity extends Activity implements OnClickListener {

	private String TAG = "fragment";
	private Fragment currentFragment = null;
	private FirstFragment firstFragment = null;
	private SecondFragment secondFragment = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById(R.id.main_bt_first).setOnClickListener(this);
		findViewById(R.id.main_bt_second).setOnClickListener(this);

		firstFragment = new FirstFragment();
		secondFragment = new SecondFragment();

		setFragment(firstFragment);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		Log.d(TAG, "------------onClick-------------");
		switch (v.getId()) {
		case R.id.main_bt_first:
			setFragment(currentFragment, firstFragment);
			break;
		case R.id.main_bt_second:
			setFragment(currentFragment, secondFragment);
			break;
		default:
			break;
		}

	}

	/**
	 * 方法一,这种每次都添加替换,效率低
	 * 
	 * @param fragment
	 */
	private void setFragment(Fragment fragment) {
		if (null == fragment) {
			return;
		}
		// 如果相同就没必要更新了
		if (currentFragment == fragment) {
			return;
		}
		currentFragment = fragment;
		// 每次都需要重新初始化
		FragmentTransaction mFragmentTransaction = getFragmentManager()
				.beginTransaction();
		mFragmentTransaction.replace(R.id.main_content, fragment);
		mFragmentTransaction.commitAllowingStateLoss(); //

		return;
	}

	/**
	 * 方法二
	 * 
	 * @param from
	 * @param to
	 */
	private void setFragment(Fragment from, Fragment to) {
                if(null==from || null== to ){
                     return ;
                 }
		// 判断是否相同,如果是就不需要更新
		if (from == to) {
			return;
		}
		currentFragment = to;
		// 每次都需要重新初始化
		FragmentTransaction mFragmentTransaction = getFragmentManager()
				.beginTransaction();
		// 判断是否已经添加过,如果没有就先添加,在显示
		if (!to.isAdded()) {
			mFragmentTransaction.hide(from).add(R.id.main_content, to).commit();
		} else {
			mFragmentTransaction.hide(from).show(to).commit();
		}
		return;
	}
}

 历史上的今天

版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站文章: 部分来源于网络,仅供站长学习和参考,若侵权请留言
广告也精彩

相关文章

广告也精彩

1 条评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

  • 125啦读书导航
    125啦读书导航 游客

    MainActivity.java中需要增加null判断了
    /**
    * 方法二
    *
    * @param from
    * @param to
    */
    private void setFragment(Fragment from, Fragment to) {
    if(null==from || null== to ){
    return ;
    }
    // 判断是否相同,如果是就不需要更新
    if (from == to) {
    return;
    }
    currentFragment = to;
    // 每次都需要重新初始化
    FragmentTransaction mFragmentTransaction = getFragmentManager()
    .beginTransaction();
    // 判断是否已经添加过,如果没有就先添加,在显示
    if (!to.isAdded()) {
    mFragmentTransaction.hide(from).add(R.id.main_content, to).commit();
    } else {
    mFragmentTransaction.hide(from).show(to).commit();
    }
    return;
    }

    广东省深圳市
    回复

网站升级中

公告

近期网站升级中,可能存在一些bug。欢迎反馈 https://www.91es.com/we.html

本站域名

本站域名 : 91es.com3xcn.com。本站邮箱 : 站长邮箱 i@oorr.cn,通知邮箱we@oorr.cn ,如有更新,请看公告 。