如何在activity和fragment之间传递对象

时间:2013-06-24 15:51:14

标签: android android-activity fragment communication

请给我一些如何在片段和活动之间传递对象的建议。

在我的项目中,有一个FragmentActivity可以显示和编辑客户资料。此活动中将包含多个选项卡以显示联系信息,地址...客户信息将作为活动中的一个类预加载。我的问题是如何将这个对象传递给每个片段或标签?更新后,我怎样才能回到活动状态?

我是否必须在我的客户类中实现Parcelable接口才能通过bundle传递?

每个选项卡都将动态创建,是否可以直接获取片段实例来修改视图?如果是,一旦tab切换,片段是否被破坏?

由于

米隆

2 个答案:

答案 0 :(得分:2)

毫无疑问:最佳解决方案是从片段中调用活动方法:

这是一个带有位图对象的示例。

在ACTIVITY中:

定义你的方法:

public Bitmap getMyBitmap() {
    return myBitmap;
}

在FRAGMENT中:

1 - 定义您的活动

private Activity_Main myActivity;

2 - 链接您的活动

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

3 - 打电话给你的方法!

myActivity.getMyBitmap()

快捷方便!

答案 1 :(得分:0)

您需要了解界面的工作原理以及如何将标记设置为片段以及如何按标记查找特定片段。你应该读这个......

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

要向您发送片段,这是基础知识。关于活动......

        // 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();

片段......

@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;
}

其中getShownIndex是....

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

如果你想从片段到活动进行通信,那么你需要接口。