我有3 sherlockListFragments在我的应用程序。每个片段都有一些editText和最后一个片段有一个按钮,当它按下时,第一个和第二个片段中的所有数据都应该被访问和存储。我使用捆绑发送片段之间的数据。与下面的简单示例,这是我的第一个片段的代码:
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);
}
},这是接收文本的片段的代码:
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);
}
}
现在我在第三个片段中有一个空值,我该怎么办?
2条答案
按热度按时间g6ll5ycj1#
你的代码失败是很正常的,在第一个片段中,你所做的就是创建一个
PersonalDataFragment
的新示例,并将数据传递给它一个Bundle
,问题是尽管 fragment 保存了Bundle
中的数据,片段本身不是应用程序使用的片段(甚至没有连接到Activity
)。您还在PersonalDataFragment
示例上设置了Bundle
,但您尝试访问WorkExpRefFragment
中的数据,这显然不起作用,因为两个片段不起作用。我们没有直接的联系。一个简单的解决方案是让
Activity
“保存”片段的数据,因为Activity
对所有片段都可用。首先在Activity
中创建两个方法来保存三个片段:然后片段将按如下方式保存其数据:
检索
WorkExpRefFragment
片段中的数据:根据您使用这些片段的方式,此解决方案可能无法工作。此外,请记住,您像上面这样传递的
Bundle
将不会保留用于配置更改。b5buobof2#
我也遇到过类似的情况
Fragment Result API解决了我的问题。
查看文档使用片段结果API获取结果