Fragment的跳转小结

Fragment的跳转小结

近来在学习过程中遇到关于fragment的跳转问题,特在此作小结

1.Activity启动Fragment并传递参数

就像Intent传值,我们依然将数据存放在Bundle中,然后利用Fragment.setArguments()将值传过去。例如:

	DemoFragment demoFragment = new DemoFragment();  
	Bundle bundle = new Bundle();  
	bundle.putString("key", "value");  
	demoFragment.setArguments(bundle);  

然后在fragment中用getArguments()将Bundle取出,读取数据

   当然,如果要fragmment读取activity中的值,还有个懒方法,我们将activity中需要读取的值定义为static,那么就可以直接调用,不过此方法很不安全,还有一个此方法的衍生方法,如下:

     public class MyActivity {
		private String mValue;
		public void getValue() {
			return mValue;
		}
	}


我们在activity中写一个get方法,然后在fragment中通过((MyActivity)getActivity).getValue()来读取所需的值,同理我们也可以在activity中写一个set方法,然后在fragment中调用此方法来修改mValue值。

2.Fragment之间相互跳转

若是activity启动FragmentA之后,直接在FragmentA中点击按键或其它操作,然后跳转到FragmentB,有两种思路
1.直接在FragmentA中调用FragmentManager,但是Fragment中直接调用FragmentManager肯定是不行的,我们可以用getActivity()获取Activity,然后利用Activity.getFragmentManager()来进行Fragment操作。
2.利用回调函数,由Fragment告知Activity要进行跳转,然后Activity利用FragmentManager进行跳转,如下:
	public class FragmentA extends Fragment{
		private OnItemClick onItemClick;
    		@Override
    		public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {	
	  		final View view= inflater.inflate(R.layout.fragment_get_cook_book, container, false);
			Button mButton=(Button)view.findViewById(R.id.button);			
			mButton.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           			 @Override
           			 public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
              				  onItemClick.OnClick();
         			   }
      			  });
			return view; 
		} 
		public void setOnItemClick(OnItemClick onItemClick){
			this.onItemClick=onItemClick; 
		} 
		public interface OnItemClick{
			 void OnClick(); 
		}
	}

然后在MyActivity中重写OnItemClick()
public class MyActivity {

		protected void onCreate(Bundle savedInstanceState) {
        		super.onCreate(savedInstanceState);

              	  	FragmentA mFragmentA=new FragmentA();
                 	FragmentA.setOnItemClick(new GetCookBookFragment.OnItemClick() {
                          	@Override
                         	 public void OnClick() {
                                   	 //当点击FragmentA中的button,回调此方法,跳转至FragmentB
                                    	FragmentTransaction fragmentTransaction=getFragmentManager().beginTransaction();
                                    	fragmentTransaction.replace(R.id.fragment_container, new FragmentB());
					fragmentTransaction.addToBackStack(null);
 					fragmentTransaction.commit();} }); 
					fragmentTransaction.replace(R.id.fragment_container, getCookBookFragment);
					fragmentTransaction.addToBackStack(null); 
					fragmentTransaction.commit(); 
				}
		}

}

若我们从FragmentA跳转到FragmentB,又想当我们点击返回键时从FragmentB退回FragmentA,该如何做呢?只需要简单两步。 1.在跳转fragmentA时,在fragmentTrasaction.commit之前加上fragmentTransaction.addToBackStack(null)(在上面代码里可以找到) 2.重写Activity的onBackPressed(),如下

    
	@Override
    	public void onBackPressed() {
        	if(getFragmentManager().getBackStackEntryCount()==0){
            	super.onBackPressed();
        	}else {
            		getFragmentManager().popBackStack();
        	}
    	}



这样,当我们点击back按键既可以返回上一Fragment


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值