在Android中将变量从父视图传递到子视图

Posted

技术标签:

【中文标题】在Android中将变量从父视图传递到子视图【英文标题】:Passing variables from Parent to Child views in 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 开发时哪种方法更好或更标准?

【问题讨论】:

【参考方案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,那么您真的只需要使用该方法。

【讨论】:

以上是关于在Android中将变量从父视图传递到子视图的主要内容,如果未能解决你的问题,请参考以下文章

在流星中将变量从父模板传递到子模板

如何在 Twig 中将变量从父模板传递到子模板?

Swift - 将数据从父视图控制器传递到子视图控制器

如何在 Vue JS 中将更新的值从父组件发送到子组件?

如何在角度2中将数据从父构造函数传递到子组件

将 NSArray 从 UIViewController 传递到子视图 [重复]