activity向Fragment传值

.activity向Fragment传值:

(1)Bundle方式:
        Fragment.setArguments(Bundle)   放值
        Fragment.getArguments(Bundle)   取值
    Activity中设置数据:
        a:通过碎片管理器开启一个事务
            FragmentTransaction ft = getFragmentManager().beginTransaction();
        b:实例化Fragment类,创建对象;
            ContentFragment cf = new ContentFragment();// 这时并没有调用生命周期方法
        c:实例化Bundle,并通过put...传值
            Bundle bundle = new Bundle();
            bundle.putString(key,"要传的数据"+new date());
        d:使用setArguments()给Fragmenu对象设置值
            cf.setArgument(bundle);
        e:向Frangment中添加占位与数据
            ft.add(R.id.contentId,cf);
        f:最后提交
            ft.commit();//commit提交后Fragment类的生命周期才开始
    Fragment类中得到数据:
        a:获得Bundle的值,getArguments();
            Bundle bundle = getArguments();
            String data = bundle.getString(key);
            对数据进行操作     

(2)Actvity公共方法的方式:
    a:在Activity中设置初始化数据,并声明一个公共的方法,设置get,返回相应数据,供外界访问
        例如:getList();
    b:  在Fragment中通过getActivity()方法获取创建Fragment的归属Activity对象,
        将这个对象进行强制类型转换,以用来调用强转的类的公共方法。
        ((MainActivity)getActivity).getList()--->获得数据源list
        进行操作

Demo:
    Activity中:
        private List list = new ArrayList();
        //公共的访问方法
        public List getList() {
            return list;
        }
        //往List中放数据源

    Fragment中:  
    //填充布局
        View view = inflater.inflate(R.layout.fragment_layout, null);
    //2.获得activity传过来的值
        List list = ((MainActivity) getActivity()).getList();
        ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, list);

        ListView listView = (ListView) view.findViewById(R.id.listView);
        listView.setAdapter(adapter);
        return view;    

你可能感兴趣的:(Android)