2

这是我的主要活动:

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 始终为空。我已经尝试过关于 SO 的其他问题,但没有一个有效。我究竟做错了什么?

4

1 回答 1

1

我认为您必须在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;
  }

有关更多详细信息,请阅读本教程

编辑

并且不要忘记在 Activity 中初始化 Fragment

      // 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();
于 2013-06-02T04:11:50.377 回答