fragment和fragmentactivity解析(二)

2014-11-23 21:43:34 · 作者: · 浏览: 22
add()方法即可添加一个fragment。 在activity中可以使用同一个FragmentTransaction对象去执行多个fragment事务,当做这样操作时,必须调用commint()方法。 下面的代码演示怎样添加一个fragment到res/layout/news_articles.xml的layout:
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news_articles);

        if (findViewById(R.id.fragment_container) != null) {

            if (savedInstanceState != null) {
                return;
            }

            HeadlinesFragment firstFragment = new HeadlinesFragment();

            firstFragment.setArguments(getIntent().getExtras());
            
            // Add the fragment to the 'fragment_container' FrameLayout
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.fragment_container, firstFragment).commit();
        }
    }
}

add()的第一个参数是fragment要放入的ViewGroup, 由resource ID指定,第二个参数是需要添加的fragment.一旦用FragmentTransaction做了改变,为了使改变生效,必须调用commit().

PS

现在再来说明另外一个实例,实例图如下,我要在四个标签页面切换(主页,手机,配件,购物车)

\

代码如下,具体就是通过影藏和显示fragment来实现切换

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.Window;

public class FramentMainActivity extends FragmentActivity {

	private Fragment[] fragments;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_frament_main);

		fragments = new Fragment[4];
		fragments[0] = getSupportFragmentManager().findFragmentById(R.id.farment_main);
		fragments[1] = getSupportFragmentManager().findFragmentById(R.id.farment_phone);
		fragments[2] = getSupportFragmentManager().findFragmentById(R.id.farment_accessory);
		fragments[3] = getSupportFragmentManager().findFragmentById(R.id.farment_cart);
		getSupportFragmentManager().beginTransaction().
		hide(fragments[1]).hide(fragments[2]).hide(fragments[3]).show(fragments[0]).commit();

	}

	public void mainClick(View view){
		getSupportFragmentManager().beginTransaction().hide(fragments[1]).hide(fragments[2]).hide(fragments[3]).show(fragments[0]).commit();
	}
	public void phoneClick(View view){
		getSupportFragmentManager().beginTransaction().hide(fragments[0]).hide(fragments[2]).hide(fragments[3]).show(fragments[1]).commit();
	}
	public void accessoryClick(View view){
		getSupportFragmentManager().beginTransaction().hide(fragments[0]).hide(fragments[1]).hide(fragments[3]).show(fragments[2]).commit();
	}
	public void cartClick(View view){
		getSupportFragmentManager().beginTransaction().hide(fragments[0]).hide(fragments[1]).hide(fragments[2]).show(fragments[3]).commit();
	}
}

3、Frament 管理

要管理 fragment,需使用 FragmentManager,要获取它,需在 activity 中调用方法 getFragmentManager()。 可以用 FragmentManager 来做以上事情:

使用方法 findFragmentById()或 findFragmentByTag(),获取 activity 中已存在的 fragment

使用方法 popBackStack()从 activity 的后退栈中弹出 fragment(这可以模拟后退键引发的动作)

用方法 addOnBackStackChangedListerner()注册一个侦听器以监视后退栈的变化

还可以使用 FragmentManager 打开一个 FragmentTransaction 来执行 fragment 的事务,比如添加或删除 fragment。

在 activity 中使用 fragment 的一个伟大的好处