gpt4 book ai didi

android - 在不重新实例化接收 fragment 的情况下在 fragment 之间传递数据

转载 作者:行者123 更新时间:2023-11-29 18:58:04 24 4
gpt4 key购买 nike

在 fragment 之间传递数据是一种常见的场景,f.i. 回答道。 here .您构建一个由 fragment 的宿主 Activity 实现的接口(interface)。在Activity的实现方法中,接收 fragment 被重新实例化,新的传输数据作为一个Bundle。

问题:我需要一个添加了新信息的接收 fragment 的旧实例,而不是新实例。

我有一个主要 Activity 与一个 fragment 容器。第一个 fragment 是一个表单,用户必须在其中填写一些数据。某个按钮打开第二个 fragment ,其中从 TreeView 中选择了一个项目。选择必须传输到第一个 fragment 中的文本字段。当然,第一个 fragment 中的条目永远无法删除。

我可以将所有输入字段的内容放在一个界面中,然后将它们重新填充到 firstFragment 的新实例中,但这对我来说似乎相当愚蠢。

“一个容器多个 fragment ”模式是否适用于我的情况?或者我应该使用第二个 fragment 容器并打开和关闭可见性?

不幸的是,startactivityforresult 不适用于 fragment 。

非常感谢!

编辑:这是我主要 Activity 的代码。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//init Databinding
oBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);

setSupportActionBar(oBinding.toolbar);

if(oBinding.mainContainer != null){

//are we restoring the instance state?
if(savedInstanceState != null){
return; //yes - do nothing
}

MainFragment oMainFragment = new MainFragment();
getSupportFragmentManager()
.beginTransaction()
.add(oBinding.mainContainer.getId(), oMainFragment)
.commit();
}
}

@Override
public void onCatButtonClicked() {
NewCatFragment oSubFragment = new NewCatFragment();
getSupportFragmentManager()
.beginTransaction()
.replace(oBinding.mainContainer.getId(), oSubFragment)
.addToBackStack(null)
.commit();
}

@Override
public void onItemSelected(String sItem) {
//here i'd like old instance qith just some new stuff
MainFragment oMainFragment = new MainFragment();
Bundle oBundle = new Bundle();
oBundle.putString("ITEM", sItem);
oMainFragment.setArguments(oBundle);
getSupportFragmentManager()
.beginTransaction()
.replace(oBinding.mainContainer.getId(), oMainFragment)
.addToBackStack(null)
.commit();
}

最佳答案

感谢@Levi Albuquerque,我找到了一个简单的解决方案。我只是把 fragment 放在一个全局变量中并重新使用它——我想我必须总是实例化它。在那种情况下,我能够简单地调用一个 setter 方法。

private MainFragment oMainFragmentInstance;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//init Databinding
oBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);

setSupportActionBar(oBinding.toolbar);

if(oBinding.mainContainer != null){

//are we restoring the instance state?
if(savedInstanceState != null){
return; //yes - do nothing
}

oMainFragmentInstance = new MainFragment();
getSupportFragmentManager()
.beginTransaction()
.add(oBinding.mainContainer.getId(), oMainFragmentInstance)
.commit();
}
}

@Override
public void onCItemSelected(String sItem) {
oMainFragmentInstance.SetCat(sItem);
getSupportFragmentManager()
.beginTransaction()
.replace(oBinding.mainContainer.getId(), oMainFragmentInstance)
.addToBackStack(null)
.commit();
}

关于android - 在不重新实例化接收 fragment 的情况下在 fragment 之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49583037/

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