Android--Fragment(2)——Fragment與Activity通信

一、獲取彼此的對象

1.Fragment可調用getActivity()方法獲取它所在的Activity;

2.Activity可調用FragmentManager的findFragmentById()或findFragmentByTag()方法獲取Fragment。

二、通信

1.Activity——>Fragment :在Activity中創建Bundle數據包,並調用Fragment的setArguments(Bundle bundle)方法,在Fragment對應的類裏調用getArguments()獲取傳遞來的Bundle數據。

Activity發送數據:

String text=edittext.getText().toString(); //獲取字符串
MyFragment3 fragment3=new MyFragment3(); //初始化Fragment子類的對象
Bundle bundle= new Bundle(); //初始化Bundle對象
bundle.putString("content", text); //綁定字符串到Bundle對象
fragment3.setArguments(bundle); //向Fragment發送數據
FragmentManager fragmentM=getFragmentManager(); //以下爲動態加載Fragment
FragmentTransaction beginTransaction = fragmentM.beginTransaction();
beginTransaction.add(R.id.layout, fragment3, "fragment3"); //動態加載Fragment
beginTransaction.addToBackStack(null);
beginTransaction.commit();


Fragment接收數據:

public class MyFragment3 extends Fragment{
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		View view=inflater.inflate(R.layout.fragment, container, false);
		TextView text=(TextView) view.findViewById(R.id.text);
		String str= getArguments().get("content")+"";//接收Activity發來的數據,並保存在String對象中
		text.setText(str);
		return view;
	}
}

那麼問題來了,靜態加載的Fragment,Activity如何傳值給Fragment?

在Fragment對應的Fragment類(如MyFragment)中聲明一個變量,用來保存Activity傳來的數據,如

private String aaa;
//定義setter、getter方法
public String getAaa(){return aaa;}
public void setAaa(String aaa){ this.aaa=aaa;}

在Activity類的函數中通過FragmentManager對象獲取靜態加載的Fragment對象。

FragmentManager fragmentManager=getFragmentManager();
Fragment findFragmentById=fragmentManager.findFragmentById(R.id.frag);  //frag 爲靜態加載的Fragment的ID
MyFragment frag=(MyFragment)findFragmentById;
frag.setAaa("向fragment靜態傳值");


2.Fragment——>Activity:需要在Fragment中定義一個內部回調接口(參數爲傳遞的數據),再讓包含Fragment的Activity實現該回調接口。這樣在Fragment子類中,可通過獲取Activity對象並調用該回調方法將數據傳遞給Activity。

public class MyFragment3 extends Fragment{
	private String code="我愛北京天安門!";
	public MyListner listener;
	public interface MyListner
	{
		public void thank(String code);
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		......
		return view;
	}
	@Override
	public void onAttach(Activity activity) {
		// TODO Auto-generated method stub
		listener=(MyListner) activity;
		listener.thank(code);
		super.onAttach(activity);
	}
}


public class MainActivity3 extends Activity implements MyListner{
       ......
		
	@Override
	public void thank(String code) {
		// TODO Auto-generated method stub
		Toast.makeText(this, code, Toast.LENGTH_SHORT).show();
		
	}
}

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章