gpt4 book ai didi

android - 更新已创建 fragment 的参数

转载 作者:太空狗 更新时间:2023-10-29 14:56:04 25 4
gpt4 key购买 nike

我有一个 fragment A 和一个 fragment B。从 2 个不同的屏幕(也是 fragment )调用 fragment A。

现在, fragment A 在调用时使用 setArguments(bundle) 将参数传递给 fragment B。

像这样:(这些行写在 fragment A中)

Bundle bundle = new Bundle();

bundle.putString("bookId", bookListItems.get(position).getBookId());
bundle.putString("bookName", bookListItems.get(position).getBookName());

Fragment b = new B();
b.setArguments(bundle);

replaceFragment(b, bundle);

replaceFragment函数如下:

private void replaceFragment (Fragment fragment, Bundle bundle) {
String backStateName = fragment.getClass().getName();

FragmentManager manager = mActivity.getFragmentManager();
boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0);

if (!fragmentPopped) { //fragment not in back stack, create it.
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.frame_container, fragment);
ft.addToBackStack(backStateName);
ft.commit();
} else {
fragment.getArguments().putString("bookId", bundle.getString("bookId"));
fragment.getArguments().putString("bookName", bundle.getString("bookName"));
}
}

现在,问题是,当从屏幕 1 调用 fragment A 时,它工作正常并将正确的参数传递给 fragment B。但是当从屏幕 2 调用它时,传递给 B 的参数永远不会更新,它总是打开上 fragment B 的最后状态。

请帮忙。

最佳答案

例如,您可以在 Fragment 的子类中创建它获取新数据,并在您想要更新它时从托管 Activity 调用此方法

public void updateData(String bookName, String bookId) {
if (getView() == null) {
return;
}
((TextView)getView().findViewById(R.id.texviewid)).setText(bookName);

}

在您的Activity 中,您必须保留对特定子类的引用,作为类成员。

另一种方法可以使用 BroadcastReceiver。在您的 Fragment 中使用特定的 IntentFilter 注册它,并在您的 Activity 中使用 LocalBroadcastManager 在本地广播更改的 Intent 。您仍然可以使用相同的方法来更新 UI。调用 onReceive 时,检查 fragment 状态,如果处于正确状态,则从 Intent 中提取数据,并调用该方法。例如

@Override
public void onReceive(Context context, Intent intent) {
if (isRemoving() || isDetached() || !isAdded()) {
return;
}
// extract data from intent
// call updateData
}

关于android - 更新已创建 fragment 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31319262/

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