介面
public interface GameSelectedListener {
public void onGameSelectedListener(int gameID, Boolean isCustom);
}
在FragmentA中的附件中,我将gameSelectedListener设置在附件中。
公共无效onAttach(活动活动)
{
super.onAttach(活动);
gameSelectedListener = (GameSelectedListener)activity;
}
在代码的一部分中,发送了一些数据
gameSelectedListener.onGameSelectedListener(groupItems.get(groupPosition).iD, isCustom);
实现该接口并在FragmentB中调用方法的主要活动
@Override
public void onGameSelectedListener(int gameID, Boolean isCustom) {
// TODO Auto-generated method stub`enter code here`
FB.setGameID(gameID, isCustom);
}
片段B内是setGameID方法,该方法只是在该片段内设置一些数据。
public void setGameID(int gameID, Boolean isCustom)
{
this.gameID = gameID;
this.isCustom = isCustom;
}
使用日志语句(此处未显示)。片段A生成的数据已成功发送到主活动。我在片段B的setGameID方法中记录的变量值也正确显示为片段A生成的值。
但是这里是问题
使用来自FragmentB的gameID和isCustom时,出现空指针异常。因此,我设置了一些默认值进行检查,我注意到即使在setGameID中记录值显示正确的值时,在setGameID中进行的值更改也不会影响全局变量。请注意,这两个变量在代码中的其他位置均未更改。只是在setGameID方法中。
我不知道这是否有帮助,但是我的片段是Java片段(不是基于XML的片段)
在主要活动中,我创建一个Fragment B实例来调用setGameID。注意,我仅在全局区域中声明这一点。
FragmentB FB = new FragmentB();
到目前为止的样子
活动A->片段事务添加片段A->从片段A按钮单击->片段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/