android - 创建新片段时,我可以在捆绑包上使用设置器吗
问题描述
当我第一次开始 android 开发时,我一直在脑海中钻研,创建一个片段应该始终通过您创建的静态方法来完成,该方法使用片段默认构造函数,通过包分配参数,在片段上设置包,然后返回它. 例如:
public static MyFragment newInstance() {
MyFragment frag = new MyFragment();
Bundle args = new Bundle();
args.putInt("lifesAnswer", 42);
frag.setArguments(args);
return frag;
}
根据我的模糊理解,我们这样做的原因是因为如果结果发生并且恢复是必要的,android 现在将隐式处理恢复片段及其参数,而无需任何额外工作。
现在,如果我在这里使用片段接口来设置可以newInstance()
作为参数传递的任意值怎么办。例如:
public static MyFragment newInstance(int someValue) {
MyFragment frag = new MyFragment();
frag.setInstanceValue(someValue); // using a public setter
return frag;
}
为了清楚起见,setInstanceValue()
只是您的标准制定者,例如:
public void setInstanceValue(int value) {
this.value = value;
}
这种方法是否完全合法且安全。对于此处的实践上下文,我有一个片段将在视图页面中多次重用,所有不同之处在于一些文本和容器背景图像。我可以只传递解析的整数值并将它们设置在包中,例如传递R.String.my_string
然后将其设置在包中并稍后使用它,但这让我思考。实施第二种方法是否可以接受,或者我应该始终使用第一种方法。
解决方案
你可以这样做:
class YourFragment extends Fragment {
String valueOne;
String valueTwo;
public static YourFragment create(String valueOne, String valueTwo) {
YourFragment fragment = new YourFragment();
fragment.valueOne = valueOne;
fragment.valueTwo = valueTwo;
return fragment;
}
}
这里不需要使用 setter。
或者使用FragmentArgs
https://github.com/sockeqwe/fragmentargs库。
推荐阅读
- javascript - 我可以在打字稿中使用什么来显示两个接口的值之间的关系
- javascript - 反应 setState 不更新状态数组
- git - 为什么 --cached 标志似乎在不同的 git 命令中引用了不同的内存?
- swift - 在我的角色上创建一个盾牌!(附加 2 个精灵)
- python - 文本处理 python 摆脱 \r\n\xa0
- r - 如何使用风险表 (R) 在生存图中添加垂直线和注释
- c# - .NET Core 3.1 - 组件的依赖关系解析失败 - AWS Mock Lambda 测试工具
- excel - 用户定义的功能不适用于其他工作表
- html - 加载图像时CSS列布局闪烁
- java - 点击按钮后获取文本android