0

我正在创建一个具有高分的游戏,但我的问题是我无法通过我的 levelcomplete.class 的按钮将 settext 放入我的 highscore.class 中。我的意思是,如果从我的 levelcomplete.class 中单击我的 highscore(button),它将在我的 highscore.class 上自动有一个 textview settext

我的解释流程 levelcomplete.class = highscore(button) = highscore.class = settext 10/10

就像把你的分数保存到高分一样

levelcomplete.class

public class levelcomplete extends Activity  {
Button highscore;
 int highestScore;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
    // TODO Auto-generated method stub
highscore = (Button) findViewById(R.id.save);
highscore.setOnClickListener(new View.OnClickListener() {

    @Override   
       public void onClick(View v) {
        //Pass your score to other activity through Android's intent.
       Intent intent = new Intent(getApplicationContext(),
                    highscore.class);
       //THis highestScore variable will actually hold the score you get in this activity.
       intent.putExtra("score", highestScore);
       startActivity(intent);
    }
});
}
}

高分.class

public class highscore extends Activity {
TextView score;
Button back;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.highscore);
score = (TextView) findViewById(R.id.score);
    int highestScore = -1;
//Now use this score variable to set anywhere.
    Bundle extras = getIntent().getExtras();

    if (extras != null) {
        highestScore = extras.getInt("score");
        }



    back = (Button) findViewById(R.id.btn_back);
    back.setOnClickListener(new View.OnClickListener() {
        @Override   
       public void onClick(View v) {
            Toast.makeText(getApplicationContext(),"Back",
                    Toast.LENGTH_SHORT).show();

    }
 });    
    // TODO Auto-generated method stub
}
}
4

2 回答 2

1

有 3 种方法可以做到这一点:

第一种方式:(不推荐):

 public static int HighScore;

在你的 highscore.class 上创建这个静态变量,你将在你的 levelcomplete.class 上设置这个公共变量,然后你可以使用这个变量。但这种方法并不是一个好方法。因为如果您的设备必须运行大量应用程序,垃圾收集会删除此静态变量。我们的数据将是云数据:)

第二种方式:(对于这个最适合你的站)

使用 Bundles 在活动之间传递数据。这是您想要的最佳选择。发送方:

 intent.putExtra("OUR_SCORE_TAG", INTEGER_SCORE);

 Bundle e = getIntent().getExtras();
 if (e!= null) {
  ourSCORE = extras.getInt("OUR_SCORE_TAG");
 }

第三种方式:(最好的方式,但您的示例不需要,这可能使用更复杂的类型):

在你的 levelcomplete.class 中,

public interface MyHighScoreClickListener
{
   public void onMyScoreButtonClickListener(int p_score);
}

并在 levelcomplete.class 例如创建此接口的实例;

public MyHighScoreClickListener listener;

highscore.setOnClickListener(new View.OnClickListener() {

@Override   
   public void onClick(View v) {
    //Pass your score to other activity through Android's intent.
   Intent intent = new Intent(getApplicationContext(),
                highscore.class);
   //THis highestScore variable will actually hold the score you get in this activity.
   intent.putExtra("score", highestScore);
   startActivity(intent);
   listener.onMyScoreButtonClickListener(highestScore); // This is deadline :)
 }
 });

你的 highscore.class 必须 ipmlement MyHighScoreClickListener,如果你不这样做,这个模式不会运行。

 public class highscore extends Activity implements  MyHighScoreClickListener ...

然后在 highscore.class 中覆盖我们的 onMyScoreButtonClickListener 方法并编写设置文本的代码。像这样实现:

 public class highscore extends Activity {
 TextView score;
 Button back;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.highscore);
score = (TextView) findViewById(R.id.score);
int highestScore = -1;

@Override
public void MyHighScoreClickListener(int p_score)
{
 this.highestScore  = p_score;
 score.setText(Integer.toString(this.hightScore));

}

这是一种设计模式。您不必在此示例中使用此模式,但这会有所帮助。

于 2013-08-07T07:06:55.017 回答
0

替换您的代码:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    highestScore = extras.getInt("score");
}

使用此代码获得高分整数:

getIntent().getIntExtra("score", 0);

它可能会帮助你。

于 2013-08-07T06:41:57.833 回答