0

ハイスコ​​アを持つゲームを作成していますが、私の問題は、レベルコンプリート.クラスのボタンからハイスコア.クラスにセットテキストを作成できないことです。私の要点は、レベルコンプリート.クラスからハイスコア(ボタン)をクリックすると、ハイスコア.クラスにテキストビューが自動的に設定されることです。

私の説明の流れ 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);
    }
});
}
}

ハイスコ​​ア.クラス

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 でこの静的変数を作成します。この public 変数を levelcomplete.class で設定します。その後、この変数を使用できます。しかし、この方法は良い方法ではありません。デバイスで多くのアプリケーションを実行する必要がある場合、この静的変数はガベージ コレクションによって削除されるためです。そして、私たちのデータはクラウドデータになります:)

2番目の方法:(このステーションでは、これがあなたに最適です)

アクティビティ間でデータを渡すためにバンドルを使用します。これはあなたの欲求に最適です。送信側:

 intent.putExtra("OUR_SCORE_TAG", INTEGER_SCORE);

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

3番目の方法:(最良の方法ですが、例では必要ありませんが、これはより複雑なタイプを使用する場合があります):

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 は 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 に答える