检查getArguments是否有一些要检索的数据

时间:2014-08-26 03:22:19

标签: android

Android Studio 0.8.7

我有以下函数在片段中设置一些参数:

 public static Fragment newInstance(UUID uuid) {
        Log.d(TAG, "newInstance: " + uuid);

        Bundle arguments = new Bundle();

        arguments.putSerializable(EXTRA_JOB_ID, uuid);
        DetailFragment fragment = new DetailFragment();
        fragment.setArguments(arguments);

        return fragment;
    }

在我的onCreate()中,我使用getArguments检索参数,如下所示:

@Override
public void onCreate(Bundle savedInstanceState) {
    Log.d(TAG, "onCreate()");
    super.onCreate(savedInstanceState);

    /* Get the arguments from the fragment */
    UUID uuid = (UUID)getArguments().getSerializable(EXTRA_JOB_ID);
    .
    .
}

但是,有时会出现我不会发送任何要检索的参数的情况,在这种情况下我的程序会崩溃。

使用Intents有hasExtra方法来检查:

 if(getActivity().getIntent().hasExtra(Intent.EXTRA_TEXT)) {
            /* There is something to be retrieved */
        }

我想知道是否有类似于getArguments的内容

非常感谢,

3 个答案:

答案 0 :(得分:20)

作为对其他答案的替代建议,您的newInstance(...)方法可以设计得稍好一些。就目前而言,即使您的UUID参数为null,它也始终会添加参数。

尝试将其更改为此...

public static Fragment newInstance(UUID uuid) {
    Log.d(TAG, "newInstance: " + uuid);

    DetailFragment fragment = new DetailFragment();

    // Don't include arguments unless uuid != null
    if (uuid != null) {
        Bundle arguments = new Bundle();
        arguments.putSerializable(EXTRA_JOB_ID, uuid);
        fragment.setArguments(arguments);
    }

    return fragment;
}

然后在你onCreate(...)的{​​{1}}方法中检查参数之前的其他事情......

Fragment

答案 1 :(得分:9)

Fragment.getArguments返回Bundle对象从其他组件发送的所有值。因此,您可以使用Bundle.containsKey检查密钥在收到的捆绑包中是否可用:

  Bundle bundle=getArguments();

   if(bundle !=null)
      if(bundle.containsKey(EXTRA_JOB_ID)){

            // get value from bundle..
      }

答案 2 :(得分:3)

newInstance()设计模式AFAIK的目的是保证您的片段在实例化时会提供参数。

换句话说,你调用newInstance(something)的原因是因为你知道某些内容会被传递到fragment参数中,因此您始终可以从中检索某些内容片段的getArguments()方法稍后。

因此,如果您计划将null作为参数传递,例如newInstance(null),哪种方式违背了使用newInstance设计模式的目的,你将获得一个nullpointer异常。

您可以调用getIntent.containsKey(EXTRA_JOB_ID)来检查您的参数是否为空。