簡體   English   中英

將數據從活動傳遞到片段返回Null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM