这是我的主要活动:
public class MainActivity extends BaseGameActivity implements GameFragment.Listener {
GameFragment mGameFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGameFragment = new GameFragment();
mGameFragment.setListener(this);
}
@Override
public void onGameEnded(int score) {
...
}
}
这只是托管我的游戏的一个片段。
public class GameFragment extends Fragment implements View.OnClickListener {
public interface Listener {
public void onGameEnded(int score);
}
Listener mListener = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.game_layout, container, false);
checkSequence();
return view;
}
public void setListener(Listener l) {
mListener = l;
}
private void checkSequence() {
if (mListener != null)
mListener.onGameEnded(score);
}
}
由于某些原因,mListener始终为null。我曾尝试过其他有关SO的问题,但没有一个起作用。我究竟做错了什么?
最佳答案
我认为您必须在GameFragment中重写这两个方法
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof Listener ) {
mListener = (Listener) activity;
} else {
throw new ClassCastException(activity.toString()
+ " must implemenet GameFragment.Listener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener= null;
}
有关更多详细信息,请阅读Tutorial
编辑
并且不要忘记在活动中初始化片段
// Create an instance of GameFragment
GameFragment mGameFragment= new GameFragment();
// Add the fragment to the 'fragment_container' Layout
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, mGameFragment).commit();
关于android - 自定义监听器始终为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16879533/