gpt4 book ai didi

java - fragment 替换不起作用

转载 作者:行者123 更新时间:2023-12-01 11:55:21 25 4
gpt4 key购买 nike

我有一个单选按钮组,当选定的单选按钮更改时,该组会更改 Activity 中的 fragment 。我有这个代码:

@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.main_menu1:
showOffersFragment();
break;
case R.id.main_menu2:
openMap();
break;
case R.id.main_menu3:
showProductsFragment();
break;
}
}

private void showProductsFragment() {
fm = getFragmentManager();
ft = fm.beginTransaction();
if (productsFragment == null) {
bundle = new Bundle();
bundle.putSerializable(ActivityConstants.PRODUCT_ITEMS, products);
productsFragment = new ProductFragment();
productsFragment.setArguments(bundle); ft.add(R.id.main_frag_container, productsFragment, "products");

} else {
//TODO
ft.replace(R.id.main_frag_container, productsFragment, "products");
productsFragment.loadList(products);
}

ft.commit();
}
private void showOffersFragment() {
Log.d(TAG, "OFFERS NULL OR :" + (offersFragment == null)+" ITEMS ="+items.size());

fm = getFragmentManager();
ft = fm.beginTransaction();

if (offersFragment == null) {
bundle = new Bundle();
bundle.putSerializable(ActivityConstants.OFFER_ITEMS, items);
offersFragment = new OffersFragment();
offersFragment.setArguments(bundle);
ft.add(R.id.main_frag_container, offersFragment,"offers");
} else {
ft.replace(R.id.main_frag_container, offersFragment,"offers");
}
ft.commit();
}
private void openMap() {
fm = getFragmentManager();
ft = fm.beginTransaction();
if(mapFragment==null){
mapFragment = new MapFragment();
ft.add(R.id.main_frag_container, mapFragment, "Map");
}else{
ft.replace(R.id.main_frag_container, mapFragment, "Map");
}
ft.commit();
mapFragment.getMapAsync(this);
}

现在的问题是当我在 fragment 之间切换时。它不会立即更改 fragment ,因此响应不是很好。我应该在它们之间切换几次,以便 fragment 可以出现。

谁能告诉我如何优化/使其正常工作?

最佳答案

它不会立即响应,因为一开始,一旦您选择每个选项,此行就会运行 ft.add(R.id.main_frag_container, mapFragment, "Map"); ,这意味着您将新 fragment 添加到同一个容器中,而不是替换旧 fragment 。

使用ft.replace(R.id.main_frag_container, mapFragment, "Map");而不是ft.add(R.id.main_frag_container, mapFragment, "Map"); 。虽然我可能是错的,但容器(此处为 R.id.main_fragment_container)必须已添加 fragment ,一种选择是仅在容器为空时添加 fragment ,否则替换。

您可能想检查addToBackStack如果您想返回之前的 fragment 。

关于java - fragment 替换不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28496822/

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