gpt4 book ai didi

android - 使用 bundle 将 fragment 之间的数据传递给另一个 fragment 示例

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:55:20 26 4
gpt4 key购买 nike

我的应用程序中有 3 个 sherlockListFragments。每个 fragment 都有一些 editTexts,最后一个 fragment 有一个按钮,当按下该按钮时,应该访问和存储第一个和第二个 fragment 中的所有数据。我使用 bundle 在 fragment 之间发送数据。使用以下简单示例,这是我的第一个 fragment 的代码:

public class PersonalDataFragment extends SherlockListFragment {


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

View v = inflater.inflate(R.layout.fragmet_personal_data, container, false);

return v;
}

@Override
public void onCreate(Bundle savedInstanceState) {
PersonalDataFragment fragment = new PersonalDataFragment();
Bundle bundle = new Bundle();
bundle.putString("y", "koko"); //any string to be sent
fragment.setArguments(bundle);

super.onCreate(savedInstanceState);
}

}这是接收文本的 fragment 代码:

public class WorkExpRefFragment extends SherlockListFragment  {
String myInt;

@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_workexp_ref, container, false);


final EditText t = (EditText) view.findViewById(R.id.editText5);
final Button generate = (Button)view.findViewById(R.id.button2);

generate.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

t.setText(myInt + "sadfigha");
}
});
return view;
}

@Override
public void onCreate(Bundle savedInstanceState) {
Bundle bundle = this.getArguments();
if(getArguments()!=null) {
myInt = getArguments().getString("y");
}

super.onCreate(savedInstanceState);
}

现在我在第三个 fragment 中有一个空值,我该怎么办?提前致谢

最佳答案

您的代码失败是正常的。在第一个 fragment 中,您所做的就是创建一个新的 PersonalDataFragment 实例,并将包含数据的 Bundle 传递给它。问题是虽然 fragment 将数据保存在 Bundle 中,但 fragment 本身并不是应用程序使用的 fragment (甚至没有附加到 Activity)。您还在 PersonalDataFragment 实例上设置了 Bundle,但您尝试访问 WorkExpRefFragment 中的数据,这显然无法正常工作,因为这两个 fragment 不'有直接联系。

您想要做的事情的一个简单解决方案是让 Activity“保存”您的 fragment 的数据,因为 Activity 可用于所有 fragment 。首先在包含三个 fragment 的Activity中创建两个方法:

public void saveData(int id, Bundle data) {
// based on the id you'll know which fragment is trying to save data(see below)
// the Bundle will hold the data
}

public Bundle getSavedData() {
// here you'll save the data previously retrieved from the fragments and
// return it in a Bundle
}

然后你的 fragment 将像这样保存它们的数据:

public class PersonalDataFragment extends SherlockListFragment {

// this will identify the PersonalDataFragment fragment when trying to save data
public void static int id PERSONAL_ID = 1;
//...

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = new Bundle();
bundle.putString("y", "koko"); //any string to be sent
YourActivity activity = (YourActivity) getActivity();
activity.saveData(PERSONAL_ID, bundle);
}
}

要检索 WorkExpRefFragment fragment 中的数据:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
YourActivity activity = (YourActivity) getActivity();
Bundle savedData = activity.getSavedData();
}

根据您使用这些 fragment 的方式,此解决方案可能行不通。另外,请记住,您像上面那样传递的 Bundle 不会因配置更改而保留。

关于android - 使用 bundle 将 fragment 之间的数据传递给另一个 fragment 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com