gpt4 book ai didi

java - fragment 接口(interface)回调不存储传递的值

转载 作者:行者123 更新时间:2023-12-02 05:33:06 27 4
gpt4 key购买 nike

界面

public interface GameSelectedListener {

public void onGameSelectedListener(int gameID, Boolean isCustom);
}

在附加中的 FragmentA 内部,我在附加中设置了 gameSelectedListener。

public void onAttach( Activity Activity ){super.onAttach( Activity );

gameSelectedListener = (GameSelectedListener)activity;

}

在代码的一部分中发送了一些数据

gameSelectedListener.onGameSelectedListener(groupItems.get(groupPosition).iD, isCustom);

实现接口(interface)并调用 FragmentB 中方法的主 Activity

@Override
public void onGameSelectedListener(int gameID, Boolean isCustom) {
// TODO Auto-generated method stub`enter code here`

FB.setGameID(gameID, isCustom);


}

fragment B 内部是 setGameID 方法,该方法仅在该 fragment 内设置一些数据。

public void setGameID(int gameID, Boolean isCustom)
{
this.gameID = gameID;
this.isCustom = isCustom;
}

带有日志语句(此处未显示)。 fragment A生成的数据已成功发送到主 Activity 。我在 fragment B 的 setGameID 方法中记录的变量值也与 fragment A 生成的变量值正确显示。

但是问题就在这里

使用 FragmentB 中的 gameID 和 isCustom 时出现空指针异常。因此,我设置了一些默认值来检查它,我注意到 setGameID 中所做的值更改不会影响全局变量,即使在记录 setGameID 中的值时显示正确的值。请注意,这两个变量在代码中的其他任何地方都没有更改。就在setGameID方法中。

我不知道这是否有帮助,但我的 fragment 是java fragment (不是基于XML的)在主 Activity 中,我创建了 Fragment B 的实例以调用 setGameID。注意我仅在全局区域中声明这一点。

FragmentB FB = new FragmentB();

这是目前为止的样子 Activity A -> fragment 事务添加 fragment A -> 从 fragment A 按钮单击 -> fragment 将 A 替换为 B

编辑添加了更多代码:问题可能就在这里。

gameSelectedListener.onGameSelectedListener(groupItems.get(groupPosition).iD, isCustom);
fragment = FragmentB.newInstance();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(Container.getId(), fragment, tag);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

我认为问题很可能就在这里,因为我调用了监听器,然后创建了 Fragment B 实例。会是这样吗?

最佳答案

使用 EventBus 而不是监听器! android官方文档中提到的这种设计模式是胡说八道!

https://github.com/greenrobot/EventBus

<小时/>
class FragmentB extends Fragment {

private int id;

public static FragmentB newInstance(int id){
Bundle args = new Bundle();
args.putInt("id", id);
FragmentB frag = new FragmentB();
frag.setArguments(args);
}


public void onCreate(Bundle b){
super.onCreate(b);
this.id = getArguments().getInt("id);
}

}

关于java - fragment 接口(interface)回调不存储传递的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25329956/

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