![](/img/trans.png)
[英]Getting null while passing data through a bundle from Activity to Fragment
[英]Passing Data From Activity To Fragment Returns Null
我正在將數據從活動傳遞到片段,在片段中返回的值為null。 請注意,我從Fragment中設置了2個myValue
,以測試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();
這會破壞我的論點並開始一個新的片段嗎?
首先為它分配值,然后檢查它是否為null
如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
myValue = this.getArguments().getString("message");
if (myValue != null)
{
之前做過的方式是在實際分配任何null
之前檢查該值是否為null
(這意味着它始終為 null),這就是為什么您總是在else
語句中而不是在if
賦值的情況下結束的原因價值。
好的,我終於明白了,我將變量放在try / catch子句中,而不是if / else,並且應用程序不再崩潰,因為該片段首先以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();
}
因此,如果/ else幾乎是正確的想法,則必須嘗試/ catch。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.