这是我的主要活动:

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/

10-10 23:44