【发布时间】:2015-11-16 08:03:55
【问题描述】:
我可以将Parcelable 传递给一个片段或活动,但我不能将Parcelable 传递给两个或更多片段或活动。
当我单击列表项时,我在 Fragment 中有一个 ListView,列表项详细信息将发送到 GetFragment1、GetFragment1 我有显示列表项更多详细信息的按钮,我想从 GetFragment2 和 GetFragment3 中的 SendFragment 获取 Parcelable。
这是Test.java
import android.os.Parcel;
import android.os.Parcelable;
public class Test implements Parcelable {
private int studentNumber;
private String studentName;
private String studentFamily;
public int getStudentNumber() {
return studentNumber;
}
public void setStudentNumber(int studentNumber) {
this.studentNumber = studentNumber;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getStudentFamily() {
return studentFamily;
}
public void setStudentFamily(String studentFamily) {
this.studentFamily = studentFamily;
}
public Test() {
}
public Test(Parcel read) {
studentNumber = read.readInt();
studentName = read.readString();
studentFamily = read.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel write, int flags) {
write.writeInt(studentNumber);
write.writeString(studentName);
write.writeString(studentFamily);
}
public static final Parcelable.Creator<Test> CREATOR =
new Parcelable.Creator<Test>() {
@Override
public Test createFromParcel(Parcel source) {
return new TestP(source);
}
@Override
public Test[] newArray(int size) {
return new TestP[size];
}
};
}
在FragmentSend.java我想发送数据到FragmentGet1.java和FragmentGet2.java和FragmentGet3.java,这是代码:
public class FragmentSend extends ListFragment {
// Classes
TestReadData readData;
TestDataSource dataSource;
private List<Test> listTest;
public FragmentSend() {
// Required empty public constructor
}
@TargetApi(Build.VERSION_CODES.M)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.fragment_send, container, false);
readData = new TestReadData(getContext());
dataSource = new TestDataSource(getContext());
refreshStudentList(inflater);
return layout;
}
public void refreshStudentList(LayoutInflater inflater) {
listTest = readData.getAllStudentRows();
ArrayAdapter<Test> testAdapter = new TestFragmentListAdapter(inflater.getContext(), listTest);
setListAdapter(testAdapter);
}
@Override
public void onResume() {
super.onResume();
dataSource.open();
}
@Override
public void onPause() {
super.onPause();
dataSource.close();
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Test model = listTest.get(position);
Bundle bundle = new Bundle();
bundle.putParcelable("Student", model);
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragmentGet1 = new FragmentGet1();
Fragment fragmentGet2 = new FragmentGet2();
Fragment fragmentGet2 = new FragmentGet3();
fragmentGet1.setArguments(bundle);
fragmentGet2.setArguments(bundle);
fragmentGet3.setArguments(bundle);
fragmentTransaction.replace(R.id.frame_container, fragmentGet1);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
在GetFragment1.java 中,我可以成功获得Parclable,但在另外两个片段(GetFragment2.java 和GetFragment3.java)中,捆绑包将为空!
这是获取 Parcelable 的 GetFragment1.java 代码: 我将此代码用于其他两个片段。
Bundle bundle;
bundle = this.getArguments();
if (bundle != null) {
model = bundle.getParcelable("Student");
if (model != null) {
Log.i(LOG_TAG, String.valueOf(String.valueOf(model.getStudentNumber());
}
} else {
Log.i(LOG_TAG, "LogDetailsFragment 'bundle' is null!");
}
如何发送Parcelable 以获得更多片段?
【问题讨论】:
-
您是否真的将其他两个片段添加到事务中,使用 .replace()、.add() 或其他方法?
-
@Kelevandos 不,我应该这样做吗?
-
嗯,是的,只有这样片段才会被创建并能够接收它的参数 :-) 你为 Fragment1 执行此操作,这就是它接收 Bundle 的原因
-
@Kelevandos 但我不想显示 GetFragment2 或 GerFragment3,我只想显示 GetFragment1 并将 Parcelable 传递给所有主题,有什么办法吗?
-
那么你需要它们做什么?也许其他班级会做得更好?请详细说明您想要实现的目标:-)
标签: android android-activity fragment parcelable