我有一个类WeatherFragment,它扩展了Fragment类。我在启动器活动中创建了它的一个实例,并在布局中对其进行了充气。我是否可以将片段对象作为额外的意图发送到我的项目中的其他活动,而不是创建WeatherFragment的新实例?
没有这方面的代码。这只是一个面试问题。
答案 0 :(得分:0)
我认为你可以,但它不会很好。快速搜索带我到question,answer说:
你不会。最多,您将关注@ 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)
可能,但我不会推荐它。但是,您可以使用findFragmentById
或findFragmentByTag
来获取对象。
答案 2 :(得分:0)
在不同的Acitvities之间你不能,因为Fragment没有实现Serializable或Parcelable。
当然你可以让你的Fragment实现这些接口,但这样你实际上不会传递Fragment,只是片段的一些状态,然后你自己序列化。
如果在onSaveState()中使用FragmentManager.putFragment(),在onCreate()中使用getFragment(),则在重新创建Activity时,可以在同一个Activity中返回片段。通常不需要这样做。