1.前提
以一个动态加载为例,可以参考加载Fragment
2.Activity向Fragment发送数据:
基本思路:主页面的布局是一个EditText和一个Button,当点击Button时将EditText的数据发送给Fragment(用Bundle发送),Fragment里只有一个TextView,用于显示数据,同时把Fagment镶嵌在主布局中。
先看主界面activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/layout">
<EditText
android:id="@+id/edt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/btn_send"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Send To Fragment"
/>
</LinearLayout>
MainActivity.java:
public class MainActivity extends Activity{
private EditText edt;
private Button btn_send;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edt = (EditText)findViewById(R.id.edt);
btn_send = (Button)findViewById(R.id.btn_send);
btn_send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String data = edt.getText().toString();
MyFragment mf = new MyFragment();
Bundle bundle = new Bundle();
bundle.putString("data", data);
mf.setArguments(bundle);
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.layout, mf, "mf");
ft.commit();
}
});
}
}
MyFragment.java:
public class MyFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container,false);
TextView txt = (TextView)view.findViewById(R.id.txt);
String data = getArguments().getString("data")+"";
txt.setText(data);
return view;
}
}
fragment.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txt"
/>
</LinearLayout>
运行结果:
点击按钮后:
3.Fragment向Activity发送数据:
思路:在Fragment中声明一个接口,在MainActivity中实现函数。
MyFragment.java:
public class MyFragment extends Fragment{
String back = "回复Activity的信息";
MyListener listener;
public interface MyListener{
public void sendBack(String data);
}
@Override
public void onAttach(Activity activity) {
listener = (MyListener)activity;
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container,false);
TextView txt = (TextView)view.findViewById(R.id.txt);
String data = getArguments().getString("data")+"";
txt.setText(data);
listener.sendBack(back);//将信息发送回去
return view;
}
}
MainActivity.java:
@Override
public void sendBack(String data) {
Toast.makeText(getApplicationContext(), data, Toast.LENGTH_SHORT).show();
}
运行结果: