gpt4 book ai didi

android - fragment getArgument() 正确的位置

转载 作者:行者123 更新时间:2023-11-29 02:34:46 27 4
gpt4 key购买 nike

尝试使用 Fragments,我开始思考填充 fragment 的正确方法。

正如文档所说,我使用 newInstance() 模式向我的 fragment 添加参数:

public static ItemFragment newInstance(ItemRealm item, AnnaleModel model) {
ItemFragment fragment = new ItemFragment();
Bundle args = new Bundle();
args.putString(MyPagerAdapter.KEY_ITEM, item.getId());
args.putParcelable(MyPagerAdapter.KEY_MODEL, model);
fragment.setArguments(args);
return fragment;
}

但是,我可以看到网上发生了几种行为。

最常见的是将getArguments()放在onCreateView()方法中,并将结果放在字段中:

protected String itemId;
protected Model mModel ;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Bundle args = getArguments();
if (args == null || (!args.containsKey(MyPagerAdapter.KEY_ITEM) || !args.containsKey(MyPagerAdapter.KEY_MODEL))) {
Log.e("TAG", "incorrect Bundle");
return null;
}
itemId = args.getString(MyPagerAdapter.KEY_ITEM);
mModel = args.getParcelable(MyPagerAdapter.KEY_MODEL);
}

我可以在其他一些地方看到将完全相同的东西放在 Fragment.onCreate() 方法中而不是 onCreateView()

最后一个行为是在 getter 中调用 getArguments()

private Model getModel(){
if (getArguments() != null) {
return getArguments().getParcelable(AnnalePagerAdapter.KEY_MODEL);
}
Log.e("Dan", "ItemFragment :: getModel (279): model==null !!");
return null;
}//I can also think about some lazyloading is needed

接下来的问题是:

  • 现在是否就使用哪种模式(这 3 种甚至另一种)达成共识?
  • 是否有一些上下文我宁愿使用一个而不是另一个?

最佳答案

不要使用 setter/getter 。这只会让事情复杂化。为什么要在 Model 类中包含 fragment 逻辑,对吧?

至于onCreateView() vs onCreate(),我在onCreate()中调用了getArguments()因为在创建 View 之前会调用此方法。所以,如果你有任何计算或其他东西,那么你可以在这里做。将其保存在全局变量中并在 onCreateView 中设置它们。但是,您可以在 onCreateView 中执行此操作,而不是那样做,对吗?那有什么区别呢?它有助于保持逻辑分离。在 onCreateView 中初始化/更新 View 并在 onCreate

中进行预计算

Example from google's samples

关于android - fragment getArgument() 正确的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47670588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com