将数据从活动传递到片段返回Null

时间:2016-07-19 17:06:46

标签: java android android-layout android-fragments nullpointerexception

我将数据从一个活动传递给片段,在片段中返回的值为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();

这会破坏我的论点并开始一个新的片段吗?

2 个答案:

答案 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而不是。