使用fragment argument

来源:互联网 发布:vb程序设计视频教程 编辑:程序博客网 时间:2024/06/07 05:48

从fragment中启动activity

@Override    public void onListItemClick(ListView l, View v, int position, long id) {        super.onListItemClick(l, v, position, id);        Crime crime = (Crime) getListAdapter().getItem(position);        Intent intent = new Intent(getActivity(), CrimeActivity.class);        //UUID是Serializable对象,我们调用了可接受Serializable对象的putExtra(...)方法,即putExtra(String, Serializable)方法。        intent.putExtra(CrimeFragment.EXTRA_CRIME_ID, crime.getId());        /**         * 从fragment中启动activity,可以调用Fragment.startActivity(Intent)方法。         *          * 除了将返回结果从托管activity传递给fragment的额外实现代码之外,Fragment.startActivityForResult(Intent, int)方法的实现代码与activity的同名方法基本相同。         */        startActivityForResult(intent, REQUEST_CRIME);    }

fragment获取保存在activity的intent内的数据信息

/**     *      * fragment有两种方式获取保存在activity的intent内的数据信息     * 方式一:即直接在fragment中调用getActivity().getIntent()方法获取托管Activity的intent,然后为extra添加key,得到intent内的extra信息。     *       但该方法牺牲了fragment的封装性,fragment不再是可复用的构建单元,因为它总需要由某个具体activity托管着。     * 方式二:先创建Bundle对象,将activity的intent内的数据信息argument添加到bundle中,再调用Fragment.setArguments(Bundle)方法,     *       因为每一个fragment实例都可附带一个Bundle对象。如下代码既是。     *            * 注意:交互的activit和fragment不需要也无法同时保持通用独立性。托管activity就应该知道有关托管fragment方法的细节,     *     但fragment则不必知道其托管activity的细节问题。     */    public static Fragment newInstance(UUID crimeId){        Bundle bundle = new Bundle();        bundle.putSerializable(EXTRA_CRIME_ID, crimeId);        CrimeFragment fragment = new CrimeFragment();        fragment.setArguments(bundle);        return fragment;    }
@Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //UUID crimeId = (UUID) getActivity().getIntent().getSerializableExtra(EXTRA_CRIME_ID);        UUID crimeId = (UUID) getArguments().getSerializable(EXTRA_CRIME_ID);        mCrime = CrimeLab.get(getActivity()).getCrime(crimeId);    }
public class CrimeActivity extends SingleFragmentActivity {    @Override    protected Fragment createFragment() {        UUID crimeId = (UUID) getIntent().getSerializableExtra(CrimeFragment.EXTRA_CRIME_ID);        return CrimeFragment.newInstance(crimeId);    }}

从fragment中返回结果

/**     * fragment能够从activity中接收返回结果,但其自身无法产生返回结果。只有activity拥有返回结果。     * 因此,尽管Fragment有自己的startActivityForResult(Intent,int)和onActivityResult(...)方法,     * 但却不具有任何setResult(...)方法。     */    getActivity().setResult(Activity.RESULT_OK, null);

代码地址

0 0
原创粉丝点击