您的位置:首页 > 其它

安卓开发_浅谈Fragment之事务添加Fragment对象

2014-09-10 11:41 423 查看
我们都知道给一个activity动态添加fragment的时候 有下面几种添加方式

看一下布局文件

package com.xqx_backfragment;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

private Button btn_new;
private Button btn_back;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_new  = (Button) findViewById(R.id.newfragment);
btn_back = (Button) findViewById(R.id.backfragment);
//新建一个新的fragment
btn_new.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction();

MyFragment fragment = new MyFragment();
action.add(R.id.show_fragment, fragment);
action.addToBackStack(null);
action.commit();

}
});

//返回
btn_back.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
onBackPressed();
}
});
}

}


addToBackStack

//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction();

MyFragment fragment = new MyFragment();
action.add(R.id.show_fragment, fragment);
action.addToBackStack(null);
action.commit();


每次点击新建按钮,都执行上面一段代码,也就是新建一个Fragment对象并加入到事务中,并将对象加入到回退栈中显示出新的fragment效果图

点击返回按钮显示当前fragment之前的fragment效果图 直到没有fragment对象时activity销毁退出

----------------------------------------------------------------------------------------------------------------------------------------

根据需求选择上述三种事务添加fragment对象的方法。

注意:

1、每次添加fragment对象都要将事务提交才有效果(action.commit()) ,下面情况没有事务提交 则fragment对象没有成功加入事务

//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction();
MyFragment fragment = new MyFragment();
action.add(R.id.show_fragment, fragment);


正确写法:

1 //创建管理者对象
2                 FragmentManager manager = getFragmentManager();
3                 //创建事务对象
4                 FragmentTransaction action = manager.beginTransaction();
5                 MyFragment fragment = new MyFragment();
6                 action.add(R.id.show_fragment, fragment);
7                 action.commit();


2、每次事务提交之前都要有这个事务对象,下面情况action.commit()之后 不能继续action.commit()

//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction();
MyFragment fragment = new MyFragment();
action.add(R.id.show_fragment, fragment);
action.commit();
MyFragment fragment1 = new MyFragment();
action.add(R.id.show_fragment, fragment1);
action.commit();


正确写法:

//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction();
MyFragment fragment = new MyFragment();
action.add(R.id.show_fragment, fragment);
action.addToBackStack(null);
action.commit();

action = manager.beginTransaction();
MyFragment fragment1 = new MyFragment();
action.add(R.id.show_fragment, fragment1);
action.addToBackStack(null);
action.commit();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: