当前位置: 首页 > 知识库问答 >
问题:

更新片段参数的最佳实践?

韩欣怿
2023-03-14

我知道“newInstance”-Pattern(实例化新Android片段的最佳实践)。但是如果另一个片段更改数据,我如何更新片段的这些参数?

我知道片段/活动之间的回调方法,但这些回调不会更新参数?!

例如:在创建片段时,我将URI与包一起传递给它。然后,另一个片段通过对第一个片段的changeUri(URI-URI)方法回调来更改这个URI。如果然后重新创建片段(例如由于屏幕旋转),它将使用参数束中的第一个URI,而不是后来更新的URI,对吗?

解决这个问题的最佳实践是什么?我是否必须手动将其存储在保存的InstanceState中,并根据使用情况决定是使用instanceState还是参数包?

我正在寻找一种处理片段参数的标准方法,所以我想我会采用这种方法(伪代码):

private Uri arg1;

public static Fragment newInstance(Uri arg1) {
  create bundle
  create fragment instance
  set bundle to fragment
  return fragment
}

private void onCreate(Bundle savedInstance) {
  if(savedInstance != null) {
    arg1 = savedInstance.uri
  }
}

private Uri getUri() {
  if(arg1 == null) {
    arg1 = getArguments.uri
  }
  if(arg1 == null) {
    arg1 = defaultValue
  }
}

所以我有一个简单的统一方法来访问我的论点。每次我需要争论的时候,不必使用if-else的麻烦。

你对此有什么看法?

共有3个答案

胡安怡
2023-03-14

保存状态的方式与片段的onSaveInstanceState回调中的活动相同。如果自上一次创建后更新了URI,则会将更新后的URI存储在捆绑包中,并将其返回到创建中。保存状态正是它的设计目的,通过更改URI,您所做的就是更改状态。

池麒
2023-03-14

我只是更改捆绑包中的值。

示例:

synchronized (fragment.getArguments()) {
    fragment.getArguments().putInt(KEY, new Value);
}

并用新参数更新内容

陈君之
2023-03-14

一旦参数集和片段被添加到活动中,就不能更改参数,我使用了与您自己定义的方法类似的方法。

首先,我检查了传递给onCreate()的包,如果它不为null,我就使用它,如果为null,我就使用参数。我将最新的数据保存在saveInstanceState()中。

有关更多详细信息:是否可以在片段添加到活动后将参数传递给片段?

 类似资料:
  • 我有几个不同的路由,但包含相似的参数。 示例: 请注意,所有三个视图都使用相同的图表控制器来控制视图。这是一个相当通用的控制器,但它需要在可用的图表类型之间切换。。。同时保持路线的其余部分<示例:(这不起作用) 有人知道如何在不完全重新键入或重建路由路径的情况下轻松更新路由参数吗?

  • 问题内容: 我已经使用.NET创建了数据访问层。在任何更新数据库记录的地方,我都使用sql来实现以下目的: 更新客户设置FirstName =:FirstName,LastName =:LastName,Address1 =:Address1,Address2=:Address2,.... etc 这意味着即使只更改了一个字段,记录中的每个字段也会更新。一位同事对此表示质疑,他说我们仅应在字段已更

  • 我即将制作我的第一个Android应用程序,我目前正在阅读有关活动和片段的信息。我打算使用Lollipop抽屉菜单功能在我的应用程序中加载不同功能的不同屏幕。像设置、关于、添加新x、浏览x等。我的导航抽屉应该为每个项目加载不同的活动单击还是加载新片段? 我所有的屏幕都有相同的风格,但内容明显不同。 如果我加载一个新活动,我是否会将导航抽屉“丢失”到一边?或者它是否始终存在,因为我希望它可以从应用程

  • 我正在开发Spring Boot Rest应用程序。ORMHibernate。我在DB中有更新相关实体的endpoint,例如,我有表“form”和表“rows”,每一行都附加到表单,所以一个表单可以包含表“rows”中的多行,每一行都有指向“form”的链接。 用例:我们正在获取要保存的行列表 其中一些新so is不包含ID 最好的方法是手动处理所有这些情况吗?或者是否有任何ORM/Spring

  • 这个问题多半是征求意见,对我的APP最好的处理方式。我有三个碎片被一个活动处理。片段A有一个可点击的元素照片,片段B有4个可点击的元素按钮。另一个片段只是在照片被点击时显示细节。我在用ActionBarsherlock。 前进和后退按钮需要将照片分别改为下一个或上一个姿势。我可以把照片和按钮放在同一个片段中,但我想把它们分开,以防我想在平板电脑中重新排列它们。 我需要一些建议--我应该把片段A和B

  • 由于我的项目的性质,我发现自己经常从QuerySet中提取片段,如下所示: 但是这给我留下了一个问题,就是如何用我选择的元素做一些事情,因为任何类型的。更新()或。切片后filter()不起作用。 我知道有几种方法可以绕过它,但它们都很混乱和混乱,严重降低了代码的可读性,特别是当我不得不经常这样做的时候。 克服限幅滤波器限制的最佳方法是什么?