【问题标题】:Passing variables from Parent to Child views in Android在Android中将变量从父视图传递到子视图
【发布时间】:2021-09-26 14:34:28
【问题描述】:

像这样传递变量有什么区别:

Intent intent = new Intent(mCtx, DetailsActivity.class);
intent.putExtra("pId", id);
intent.putExtra("pType", type);

mCtx.startActivity(intent);

并使用关键字Bundle?

Intent intent = new Intent(MainActivity.this, DetailsActivity.class);

// Now let's Pass data using Bundle
Bundle bundle = new Bundle();
bundle.putString("pId", id);
bundle.putString("pType", type;
intent.putExtras(bundle);

startActivity(intent);

我是 Android 开发的新手,我很好奇在进行 android 开发时哪种方法更好或更标准?

【问题讨论】:

    标签: android android-studio android-intent android-bundle


    【解决方案1】:

    意图

    public Intent putExtra(String name, String value) { 
      if (mExtras == null) { 
            mExtras = new Bundle(); 
         } 
        mExtras.putString(name, value); 
        return this; 
    }
    

    捆绑

    public void putString(String key, String value) { 
        unparcel(); 
         mMap.put(key, value);
     }
    

    putExtras 不会将您的捆绑包放入 Intent。相反,它会将其复制到当前的意图包中。

    public Intent putExtras(Bundle extras) { 
        if (mExtras == null) { 
           mExtras = new Bundle(); 
        } 
        mExtras.putAll(extras); 
        return this; 
    }
    

    【讨论】:

      【解决方案2】:

      推荐第一种方法。所有样本都使用第一个 putExtra(key, value) 方法。

      在大多数情况下,您应该知道要传递给下一个活动的内容,因此 putExtra(key, value) 是有意义的,因为您知道键是什么。

      我能想到的使用第二种方法的唯一场景是一个瞬态活动,它从前一个活动接收包,并且需要将所有信息传递给下一个活动。瞬态活动不需要知道正在传递什么,只需将它收到的所有内容传递给下一个活动即可。

      顺便说一句,如果你创建自己的Bundle,把键值放进去然后调用putExtra(bundle),临时的bundle有额外的成本,所以效率较低。

      【讨论】:

        【解决方案3】:

        像这样传递变量和使用关键字Bundle有什么区别?

        一个人直接放置密钥,一个人首先将它们放在一个Bundle中。最终结果是一样的。

        我是 Android 开发的新手,我很好奇在进行 android 开发时哪种方法更好或更标准?

        第一个是“更好”或更“标准”,仅仅是因为它消除了首先自己创建捆绑包的需要 - 这是一个多余的步骤。如果您的代码已经有一些逻辑来维护您想要在 Intent 中作为键/值对传递的数据的 Bundle,那么您真的只需要使用该方法。

        【讨论】:

          猜你喜欢
          • 2015-11-12
          • 1970-01-01
          • 1970-01-01
          • 2018-02-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-08
          相关资源
          最近更新 更多