可以将在MainActivity中创建的片段对象作为额外的意图传递给其他活动吗?

时间:2015-09-16 07:38:27

标签: java android android-fragments android-intent

我有一个类WeatherFragment,它扩展了Fragment类。我在启动器活动中创建了它的一个实例,并在布局中对其进行了充气。我是否可以将片段对象作为额外的意图发送到我的项目中的其他活动,而不是创建WeatherFragment的新实例?

没有这方面的代码。这只是一个面试问题。

3 个答案:

答案 0 :(得分:0)

我认为你可以,但它不会很好。快速搜索带我到questionanswer说:

  

你不会。最多,您将关注@ Ribose的answer - 通过额外的内容将标志传递给活动,以指示要创建的片段集。

你的问题不是那么具体。 This question特定于OP想要的内容,但也许其中一个答案可以帮助您。

P.S。如果您希望实验,则可以使用WeatherFragment实施Parcelable。然后通过意图将其从一个活动传递到另一个活动。 This answer将告诉您如何以及如此操作(修改为扩展Fragment类)

public class WeatherFragment extends implements Parcelable {

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

        return inflater.inflate(R.layout.fragment, container, false);
    }

    /* everything below here is for implementing Parcelable */

    // 99.9% of the time you can just ignore this
    public int describeContents() {
        return 0;
    }

    // write your object's data to the passed-in Parcel
    public void writeToParcel(Parcel out, int flags) {
        //code
    }

    // this is used to regenerate your object. All Parcelables must have a CREATOR that implements these two methods
    public static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>() {
        public MyParcelable createFromParcel(Parcel in) {
            return new MyParcelable(in);
        }

        public MyParcelable[] newArray(int size) {
            return new MyParcelable[size];
        }
    };

    // example constructor that takes a Parcel and gives you an object populated with it's values
    private MyParcelable(Parcel in) {
        //code
    }

    //other methods
}

然后,再次从answer,您可以像这样使用它:

Intent intent = new Intent();
intent.putExtra(KEY_EXTRA, weatherFragment);

再次从answer(你真的应该读到这个答案),你就这样得到它:

Intent intent = getIntent();
WeatherFragment weatherFragment = (WeatherFragment) intent.getParcelableExtra(MainActivity.KEY_EXTRA);

我没有测试过这个,所以我不确定它是否会起作用。

答案 1 :(得分:0)

可能,但我不会推荐它。但是,您可以使用findFragmentByIdfindFragmentByTag来获取对象。

答案 2 :(得分:0)

在不同的Acitvities之间你不能,因为Fragment没有实现Serializable或Parcelable。

当然你可以让你的Fragment实现这些接口,但这样你实际上不会传递Fragment,只是片段的一些状态,然后你自己序列化。

如果在onSaveState()中使用FragmentManager.putFragment(),在onCreate()中使用getFragment(),则在重新创建Activity时,可以在同一个Activity中返回片段。通常不需要这样做。