Fragment基本使用(三)——与Activity之间传递数据

来源:互联网 发布:VPN网络 编辑:程序博客网 时间:2024/05/08 18:42

一、Fragment向Activity传递数据

1,Fragment
在Fragment中定义一个接口,然后在onAttach(Activity activity)方法中取得这个接口的实现。

/** * Created by chourongqishi on 16/9/21. */public class FirstFragment extends Fragment {    private TransDataToActivityListener listener;    public interface TransDataToActivityListener {        public void setDatas(String datas);    }    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable    Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment_first, container, false);        listener.setDatas("向Activity传递数据");        return view;    }    @Override    public void onAttach(Context context) {        super.onAttach(context);        try {            listener = (TransDataToActivityListener) context;        } catch (ClassCastException e) {            e.printStackTrace();        }    }}

2,Activity接收数据
Activity中实现Fragment定义的接口,然后取得数据

public class MainActivity extends FragmentActivity implements FirstFragment        .TransDataToActivityListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //创建要添加的Fragment对象        FirstFragment firstFragment = new FirstFragment();        //获取Fragment管理器        FragmentManager manager = getSupportFragmentManager();        //获取事物管理器        FragmentTransaction transaction = manager.beginTransaction();        //添加Fragment        transaction.add(R.id.fl_container, firstFragment);        //提交事物        transaction.commit();    }    /**     * 实现Fragment中的接口,获取数据     *     * @param datas     */    @Override    public void setDatas(String datas) {        Toast.makeText(this, datas, Toast.LENGTH_SHORT).show();    }}

二、Activity向Fragment传递数据

1,Activity:

/**     * 实现Fragment中的接口,获取数据     *     * @param datas     */    @Override    public void setDatas(String datas) {        //获取Fragment管理器        FragmentManager manager = getSupportFragmentManager();        //获取事物管理器        FragmentTransaction transaction = manager.beginTransaction();        //创建一个新Fragment对象        NewFragment newFragment = new NewFragment();        //添加数据        Bundle bundle = new Bundle();        bundle.putString("datas", datas);        //向Fragment传递数据        newFragment.setArguments(bundle);        //替换Fragment        transaction.replace(R.id.fl_container, newFragment);        //将上一个Fragment加入回退栈        transaction.addToBackStack(null);        //提交事物        transaction.commit();    }

2,Fragment接收数据

/** * Created by chourongqishi on 16/9/21. */public class NewFragment extends Fragment {    private TextView tvShowDatas;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable    Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment_new,container,false);        tvShowDatas = (TextView) view.findViewById(R.id.tv_show_datas);        Bundle bundle = getArguments();        String datas = bundle.getString("datas");        tvShowDatas.setText(datas);        return view;    }}
0 0
原创粉丝点击