从Fragment往Activity方向的通信的思路:
Fragment ----> Activity :
---- 需要在Fragment内部定义一个回调接口,然后让包含该Fragment的Activity实现该回调接口,这样Fragment就可以调用该回调方法将数据传递给Activity了
从Fragment中向Activity中传递数据的完整思路是:
1,在Fragment中定义一个接口如 MyListener,该接口中定义个方法transData(String str)
2,宿主activity实现该接口,并实现方法transData(String str)
3,在Fragment中通过onAttach(..)方法获取到宿主Activity,并向上转型成MyListenr后,调用transData(String str)方法, 这样就将数据从Fragment传递到了Activity了
3,在Fragment中通过onAttach(..)方法获取到宿主Activity,并向上转型成MyListenr后,调用transData(String str)方法, 这样就将数据从Fragment传递到了Activity了
下面直接上代码:
Fragment中的代码:
public class MyFragment extends Fragment {
EditText editText;
Button btn;
MyListener myListener;
//我自己的回调接口,等下宿主Activity实现
public interface MyListener
{
public void transData(String str);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
myListener = (MyListener)activity;//获取宿主Activity
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layou_fragment, null);
editText = (EditText) view.findViewById(R.id.editText);
btn = (Button)view.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String str = editText.getText().toString();
myListener.transData(str);//往宿主Activity中传递数据
}
});
return view;
}
}
宿主Activity中的代码:
public class MainActivity extends Activity implements MyListener{
<span style="white-space:pre"> </span>TextView textView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 从Fragment向Activity中传递数据的思路:
* Fragment --> Activity:
* 需要在Fragment内部定义一个回调接口,然后让包含该Fragment的Activity实现该回调接口,
* 这样Fragment就可以调用该回调方法将数据传递给Activity了
*
* 从Fragment中向Activity中传递数据的完整思路是:
* 1,在Fragment中定义一个接口如 MyListener,该接口中定义个方法transData(String str)
* 2,宿主activity实现该接口,并实现方法transData(String str)
* 3,在Fragment中通过onAttach(..)方法获取到宿主Activity,并向上转型成MyListenr后,调用transData(String str)方法,
* 这样就将数据从Fragment传递到了Activity了
*/
textView = (TextView) findViewById(R.id.textView);
//先加载一个Fragment进来
MyFragment myFragment = new MyFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
beginTransaction.add(R.id.container, myFragment);
beginTransaction.commit();
}
/**
* 实现的Fragment中的回调接口,等下该方法会被调用,就在这里接收传递过来的数据
*/
public void transData(String str) {
//将传递来的数据显示
textView.setText("从Fragment传递来的数据是 : "+str);
}
}
布局文件 layout_fragment.xml 中的代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.xulunpeng.fragment05.MainActivity" >
<RelativeLayout
android:layout_width="200dp"
android:layout_height="200dp"
android:background="@android:color/black"
android:layout_gravity="center">
<EditText
android:layout_width="180dp"
android:layout_height="40dp"
android:background="@android:color/white"
android:layout_centerInParent="true"
android:textSize="20sp"
android:id="@+id/editText"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:text="点击按钮发送"
android:id="@+id/btn"/>
</RelativeLayout>
</LinearLayout>
布局文件 activity_main.xml 中的代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xulunpeng.dongtaidown.MainActivity">
<LinearLayout
android:layout_width="300dp"
android:layout_height="300dp"
android:orientation="vertical"
android:background="@android:color/holo_green_dark"
android:layout_centerInParent="true"
android:id="@+id/container">
</LinearLayout>
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_centerHorizontal="true"
android:background="@android:color/background_dark"
android:textColor="@android:color/white"
android:id="@+id/textView"/>
</RelativeLayout>
点击传递前的效果图:
点击传递数据后的效果图:
总结:
---- 从Fragment中向Activity中传递数据的完整思路是:
1,在Fragment中定义一个接口如 MyListener,该接口中定义个方法transData(String str)
2,宿主activity实现该接口,并实现方法transData(String str)
3,在Fragment中通过onAttach(..)方法获取到宿主Activity,并向上转型成MyListenr后,调用transData(String str)方法,这样就将数据从Fragment传递到了Activity了
1,在Fragment中定义一个接口如 MyListener,该接口中定义个方法transData(String str)
2,宿主activity实现该接口,并实现方法transData(String str)
3,在Fragment中通过onAttach(..)方法获取到宿主Activity,并向上转型成MyListenr后,调用transData(String str)方法,这样就将数据从Fragment传递到了Activity了