Android筆記--簡單的Fragment和Activity的之間的資料互動(傳值)
通過點選MainActivity裡的按鈕傳一個字串給MainActivity2的fragment裡的textview,並顯示出來。
1、在MainActivity下:通過intent先把字串傳給MainActivity2。
btn=(Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent=new Intent(MainActivity.this,MainActivity2.class);
intent.putExtra(MainActivity.Value, "傳值到MainActiviy2的fragment中");
startActivity(intent);
}
});
2、在MainActivity2下:
title = getIntent().getStringExtra(MainActivity.Value); //MainActivity2接收到字串後。
FragmentManager fm = getSupportFragmentManager(); //使用FragmentManager,管理Activity中的fragment
Fragment fragment = fm.findFragmentById(R.id.fragment); //找到相應的fragment
Bundle bundle = new Bundle();
bundle.putString(MainActivity2.Arguments, title);
MyFragment2 myFragment2 = new MyFragment2();
myFragment2.setArguments(bundle); //通過setArguments傳值
fm.beginTransaction().add(R.id.layout, myFragment2).commit(); //通過add()將佈局加入fragment容器中
3、在MyFragment2下:
TextView tv = (TextView) view.findViewById(R.id.textView1);
Bundle bundle = getArguments(); //getArguments()獲取Activity通過setArguments傳遞的值
if (bundle != null) {
String text = bundle.getString(MainActivity2.Arguments);
tv.setText(text); //將內容顯示在textview上,完成傳值
}
通過點選MainActivity裡的fragment的按鈕傳一個字串給MainActivity的textview,並顯示出來。
具體方法是通過介面回撥來實現
1、在MyFragment下:
public interface MyListener //定義一個內部介面
{
public void transmit(String value); //定義一個方法,實現該介面的類必須實現該方法
}
public MyListener listener; //宣告介面
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
listener=(MyListener) activity; //將activity的物件傳遞給listener,相當於例項化,個人理解,因為抽象類不能被例項化
super.onAttach(activity);
}
Button btn=(Button) view.findViewById(R.id.btn_transmit);
btn.setOnClickListener(new OnClickListener() {//fragment裡的按鈕的點選監聽,當點選該按鈕將觸發回撥
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
listener.transmit("fragment通過回撥函式傳值給activity");
}
});
2、在MainActivity下:
先實現MyListener介面
@Override
public void transmit(String value) { //實現方法
// TODO Auto-generated method stub
TextView tv=(TextView) findViewById(R.id.tv_transmit);
tv.setText(value); //將MainActivity裡的fragment傳來的值顯示在textview上
}