2016-06-28 5 views
0

私はゲームの各ラウンドで何が起こったかを示すために、ゲームログを作成しようとしています。ログは別のアクティビティにありますが、私はプレーヤーが何をしていても常に更新したいと思っています。プレーヤーは特定のことを行うボタンを押すだけです。投稿するにはあまりにも多くのコードですが、私は新しいバンドルと意図を作りました。追加メインからの別のアクティビティのTextViewを追加

MainActivityにあります。

Bundle bundle = new Bundle(); 
Intent GameLogSwitch = new Intent(getApplicationContext(),GameLog.class); 

これを他のアクティビティに送信しようとしていますが、変数を入れることができるかどうかはわかりません。それ以外の場合には、そのような(「キー」、「それは作品」)のコースgamelogボタンがGamelog.classで今 ​​

を押したとき、私はこれを持って、その後

GameLogSwitch.putExtra("Break","---BREAK---"+"\n"+Player1Name+": "+GreenResult.getText()+"("+GrTop1+","+GrTop2+","+GrTop3+")"+"\n"+Player2Name+": "+RedResult.getText()+"("+RdTop1+","+RdTop2+","+RdTop3+")"); 

と簡単な言葉で動作します私はこれを持っています。

package com.example.adam.snookerproject; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class GameLog extends AppCompatActivity { 
     private TextView GameLogText; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_game_log); 
     GameLogText = (TextView) findViewById(R.id.GameLogText); 
     Intent GameLogSwitch = getIntent(); 
     String myString = GameLogSwitch.getStringExtra("Break"); 
     GameLogText.append(myString); 
    } 
} 

私にはいくつか質問があります。まず、なぜ私の弦で一度しか動作しないのですか?私がアクティビティを開始したとき、つまり同じボタンをもう一度押しても同じことをもう一度書き込まないのはなぜですか?

第2に、私の "Break"キーにはうまくいかないようですが、これは送信するテキストに変数があるという事実と関係がありますか?単純なテキストの場合にのみ有効ですGameLogSwitch.putExtra("key","It works");

これを行うには簡単な方法が必要です。ありがとうございました。

更新1:Drvの回答はうまくいくようですが、私がしようとするとGameLogText.append(AppConstants.log)ボタンを何回押しても、テキストビュー内のすべてが置き換えられます。私は再び活動を開始するたびにアクティビティがリセットされていると思います。これはどうですか?

+0

tl; dr。EventBusライブラリを調べれば、どこからでもどこにでもデータを非同期で送ることができるので、あなたの人生はずっと楽になります。 – Vucko

+2

http://square.github.io/otto/ – anivaler

+0

hmm病気を見てください。 – deathskiller

答えて

1

定数クラスのグローバルな文字列を作成し、あなたが好きな場所にそれを使用します。

public class AppConstants{ 

     public static String log=""; 
    } 

編集あなたが意図してそれを送信しているクラス内の文字列:

AppConstants.log="---BREAK---"+"\n"+Player1Name+": "+GreenResult.getText()+"("+GrTop1+","+GrTop2+","+GrTop3+")"+"\n"+Player2Name+": "+RedResult.getText()+"("+RdTop1+","+RdTop2+","+RdTop3+")"; 

し、それを使用しますあなたのクラス:

package com.example.adam.snookerproject; 

    import android.content.Intent; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.widget.TextView; 

    public class GameLog extends AppCompatActivity { 
    private TextView GameLogText; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_game_log); 

     GameLogText = (TextView) findViewById(R.id.GameLogText); 

     //get your log here using AppConstants.log 
    } 
    } 
+0

これは私の問題感謝の最初の部分のために働くようです! – deathskiller

0

getApplicationContextの代わりにgetContext()を使用してみてくださいrデバッグモードの文字列

0

コールバックまたはインターフェイスを使用します。メインアクティビティからインターフェイスを起動し、テキストビューを更新するアクティビティでインターフェイスの呼び出しを実装します。そのメソッド内でテキストビューを更新します。

Read here More about Communication between Activity Activity and Fragment Activity

0

(OPに代わって解決策を投稿します)。

出力の末尾に"\n"+AppConstants.logを追加して管理しました。

関連する問題