我将数据从一个活动传递给片段,在片段中返回的值为null。请注意,我已经从Fragment设置了2个toast来测试myValue
的值,并且返回的toast来自于else语句,其中myValue为null。
的活动:
case R.id.forward:
Bundle bundle = new Bundle();
bundle.putString("message", "From Activity");
Fragment_02_Contacts mainFragment = new Fragment_02_Contacts();
mainFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().add(android.R.id.content, mainFragment).commit();
break;
片段:
String myValue;
.....
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (myValue != null)
{
myValue = this.getArguments().getString("message");
Toast.makeText(getActivity(), "message: "+myValue, Toast.LENGTH_SHORT).show();
return inflater.inflate(R.layout.fragment_02_contacts, container, false);
}
else
{
Toast.makeText(getActivity(), "message: "+myValue, Toast.LENGTH_SHORT).show();
// message is null ????
}
编辑: 我认为原因可能与:
有关getSupportFragmentManager().beginTransaction().add(android.R.id.content, mainFragment).commit();
这会破坏我的论点并开始一个新的片段吗?
答案 0 :(得分:1)
首先为其分配值,然后检查它是否为null
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
myValue = this.getArguments().getString("message");
if (myValue != null)
{
之前你做过的方法是在实际分配任何内容之前检查值是否为null
(这意味着总是为空),这就是你总是这样做的原因最终出现在else
语句中,而且从未在if
中分配值。
答案 1 :(得分:1)
好的我终于明白了,我把变量放在try / catch子句而不是if / else中,app不再崩溃,因为片段首先以null开头并捕获一个catch并在传递值之后从activity开始,try子句返回数据。
try{
myValue = this.getArguments().getString("message");
Toast.makeText(getActivity(), "message: "+myValue, Toast.LENGTH_SHORT).show();
}catch(NullPointerException e ){
Toast.makeText(getActivity(), "message: "+myValue, Toast.LENGTH_SHORT).show();
}
所以if / else的想法几乎是正确的,它必须是try / catch而不是。