接口
public interface GameSelectedListener {
public void onGameSelectedListener(int gameID, Boolean isCustom);
}
在附件中,我设置了游戏选择监听器在附件中。
public void onAttach(Activity Activity){super.onAttach(Activity);
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生成的数据成功发送到main活动。我将片段B的setGameID方法中变量的值也正确地记录到片段A生成的值。
然而这里有个问题
使用FragmentB中的gameID和iCustom时,我会遇到空指针异常。所以我设置了一些默认值来检查它,我注意到setGameID中的值更改不会影响全局变量,即使在记录setGameID中的值时显示了正确的值。请注意,这两个变量在代码的其他任何地方都没有更改。只是在setGameID方法中。
我不知道这是否有帮助,但我的片段是java片段(不是基于XML的),在主要活动中,我创建了片段B的一个实例以调用setGameID。注:我仅在全球范围内声明。
FragmentB FB = new FragmentB();
这是目前为止的情况活动A-
编辑添加了更多代码:问题可能在这里。
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();
我认为问题可能就在这里,因为我调用了侦听器,然后在片段B实例中创建了一个。会是这样吗?
当您将片段A替换为片段B时。
@Override
public void onGameSelectedListener(int gameID, Boolean isCustom) {
...// rest of the code
Bundle args = new Bundle();
args.putInt("id", gameID);
args.putBoolean("bool", isCustom);
FB.setArguments(args);
}
在片段B中
int value = getArguments().getInt("id");
使用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);
}
}
这是我的代码,根据文档,它是用于: 我在这里找到了一个解决方案,但我并不真正理解它,因为它是用编写的,我也不理解。我需要帮助!! ---编辑----
问题内容: 给定您具有接受功能的场景。如果确定是切片,我如何在该切片上? 前往游乐场示例:http://play.golang.org/p/DNldAlNShB 问题答案: 好吧,我曾经使用过,然后如果它是一个切片,则可以调用,并在该值上调用以在索引处获取切片和元素的。我认为您将无法使用范围操作来做到这一点。 前往游乐场示例:http : //play.golang.org/p/gQhCTiwPA
问题内容: 短 以下代码不能完全满足您的期望:https : //play.golang.org/p/sO4w4I_Lle 我以为我像往常一样弄乱了一些指针/引用的东西,但是我希望我的… …和… …以相同的方式运行(例如,更新作为第二个参数传递的引用)。 长 上面的示例是一个没有太多意义的最小复制器。这是为了使其能够在操场上工作。但是,一个不那么有意义的最小示例是: 想法是将YAML解组为(而不是
这是我完整的logcat: 在Android.support.v4.app.backStackRecord.doaddop(backStackRecord.java:414)在Android.support.v4.app.backStackRecord.replace(backStackRecord.java:449)在Android.support.v4.app.backStackRecord.
P.P.S@Philipp Jahoda,我实现了onCreateOptionsMenu(...)在片段的托管活动中。