Fragment向Activity传递数据一般采用接口回调的方式,在Fragment中自己定义一个接口,并在接口中自定义一个方法,然后在MainActivity中去实现这个接口,并重写这个接口中的方法,最后在Fragment中使用回调监听去调用这个方法。感觉写的还是太过于理论性,上完代码就知道是怎么回事了。
1)Fragment的布局文件,里面只有一个TextView
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:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
2)里面有一个自定义的接口MyListener,接口中有一个thak()方法
MyFragment.java
package com.huangyi.fragmentdemo4;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
public class MyFragment extends Fragment {
private String code="Thank you,Activity!";
public MyListener mListener;
public interface MyListener{
public void thank(String code);
}
//1.当Fragment被添加到Activity的时候会被调用,并且只会被调用一次
@Override
public void onAttach(Activity activity) {
this.mListener = (MyListener) activity;
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
Toast.makeText(getActivity(), "向Activity发送"+code, 1).show();
mListener.thank(code);
return view;
}
}
3)主布局文件
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送" />
</LinearLayout>
4)主程序
MainActivity.java
package com.huangyi.fragmentdemo4;
import com.huangyi.fragmentdemo4.MyFragment.MyListener;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity implements MyListener{
private Button send;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
send = (Button) findViewById(R.id.send);
send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MyFragment fragment = new MyFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
beginTransaction.add(R.id.layout, fragment,"fragment");
beginTransaction.commit();
}
});
}
@Override
public void thank(String code) {
Toast.makeText(MainActivity.this, "已成功接收到了"+code, 1).show();
}
}
结果: