how to pass object between activity and fragment

2019-05-24 12:24发布

Please give me some suggestions how to pass object between fragment and activity.

In my project, there is one FragmentActivity to show and edit customer profile. Multiple tabs will be contained in this activity to show contact info, address... The customer info will be preload as one class in the activity. My question is how could I pass this object to each fragment or tab? Once updated, how could I pass back to activity?

Do I must to implement the Parcelable interface in my customer class to pass by bundle?

Each tab will be dynamic created, is possible to get the fragment instance to modify view directly? If yes, once tab switch, is fragment destroyed?

Thanks

Myron

2条回答
劳资没心,怎么记你
2楼-- · 2019-05-24 12:40

You need to know how interfaces work and how to set tags to a fragment as well as how you find a specific fragment by tag. You should read this...

http://developer.android.com/training/basics/fragments/communicating.html

To send objects to you fragments this are the basics. On the activity....

        // Create fragment and give it an argument for the selected article
        ArticleFragment newFragment = new ArticleFragment();
        Bundle args = new Bundle();
        args.putInt(ArticleFragment.ARG_POSITION, position);
        newFragment.setArguments(args);

        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

        // Replace whatever is in the fragment_container view with this fragment,
        // and add the transaction to the back stack so the user can navigate back
        transaction.replace(R.id.fragment_container, newFragment);
        transaction.addToBackStack(null);

        // Commit the transaction
        transaction.commit();

On the fragment...

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    ScrollView scroller = new ScrollView(getActivity());
    TextView text = new TextView(getActivity());
    int padding = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
            4, getActivity().getResources().getDisplayMetrics());
    text.setPadding(padding, padding, padding, padding);
    scroller.addView(text);
    text.setText(Shakespeare.DIALOGUE[getShownIndex()]);
    return scroller;
}

where getShownIndex is....

 public int getShownIndex() {
    return getArguments().getInt("index", 0);
}

If you wanna communicate from the fragment to the activity then you need interfaces.

查看更多
家丑人穷心不美
3楼-- · 2019-05-24 12:48

No doubt: best solution is to call an activity method from the fragment:

Here an example with a Bitmap Object.

In ACTIVITY:

define your method:

public Bitmap getMyBitmap() {
    return myBitmap;
}

In FRAGMENT:

1 - Define your activity

private Activity_Main myActivity;

2 - Link your activity

@Override
public void onAttach(Activity myActivity) {
    super.onAttach(myActivity);
    this.activity= (Activity_Main) myActivity;
}

3 - Call your method!

myActivity.getMyBitmap()

Quick and easy!

查看更多
登录 后发表回答