1. 程式人生 > >Android筆記--簡單的Fragment和Activity的之間的資料互動(傳值)

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上
}

相關原始碼下載:http://download.csdn.net/detail/weilexuexia/9459268