将 Parcelable 与按钮结合使用时出现的问题

Problems when using Parcelable in connection with buttons

我正在编写一个简单的应用程序,您可以在其中初始化自定义 class "Player" 的实例,然后通过 parcelable 将这些对象传递给下一个 activity。到目前为止一切正常,但是我完全重写了按钮的代码(我之前使用了不同的方法)。现在,如果我不声明 Player 实例为 final,我会得到一个错误。当我将鼠标悬停在 "player 1" 上时,例如这一行:

bundle.putParcelable("EXTRA_PLAYER_1", player1);

它说 "Variable 'player 1' is accessed from within inner class, needs to be declared final"。 这是 "onCreate" 方法的相关部分:

etPlayer4 = (EditText) findViewById(R.id.etPlayer4);
String namePlayer4 = etPlayer4.getText().toString();
Player player4 = new Player();
player4.setPlayerName(namePlayer4);
player4.setPlayerScore(0);

btnStartGame = (Button) findViewById(R.id.btnStartGame);
btnStartGame.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent=new Intent(CreatePlayersScreen.this,ScoreScreen.class);
        Bundle bundle = new Bundle();
        bundle.putParcelable("EXTRA_PLAYER_1", player1);
        bundle.putParcelable("EXTRA_PLAYER_2", player2);
        bundle.putParcelable("EXTRA_PLAYER_3", player3);
        bundle.putParcelable("EXTRA_PLAYER_4", player4);
        intent.putExtras(bundle);
        startActivity(intent);
    }
});

如何避免将 Player 实例声明为最终实例?谢谢!

在 onCreate 之外定义您的播放器对象,以便您可以在 class 的任何地方使用它们。您仍然可以在 oncreate

中为它们分配值
// define
Player player4 , player3,
        player2, player1;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    etPlayer4 = (EditText) findViewById(R.id.etPlayer4);
    String namePlayer4 = etPlayer4.getText().toString();

    // assign
    player4 = new Player();
    player4.setPlayerName(namePlayer4);
    player4.setPlayerScore(0);

    btnStartGame = (Button) findViewById(R.id.btnStartGame);
    btnStartGame.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent(CreatePlayersScreen.this,ScoreScreen.class);
            Bundle bundle = new Bundle();
            bundle.putParcelable("EXTRA_PLAYER_1", player1);
            bundle.putParcelable("EXTRA_PLAYER_2", player2);
            bundle.putParcelable("EXTRA_PLAYER_3", player3);
            bundle.putParcelable("EXTRA_PLAYER_4", player4);
            intent.putExtras(bundle);
            startActivity(intent);
        }
    });
}