0

Voiceを拡張Activityし、カウンターを含むクラスがあります。ユーザーが正解すると、カウンターは経由で1つ追加しますcounter++;

public class Voice  extends Activity implements OnClickListener{
    ListView lv;
    static final int check = 111;
    int counter_score;
    TextView txView;
    MediaPlayer ourSong;
    ImageView display;

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

    private void initialize() {
        lv = (ListView)findViewById(R.id.lvVoiceReturn);
        Button b = (Button)findViewById(R.id.imageButtonSelector);
        txView = (TextView)findViewById(R.id.counter);
        b.setOnClickListener(this);
        counter_score=0;
    }

このスコアはバンドルされ、「あなたのスコアは1です」という文字列内の次のアクティビティ「What」に渡されます。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == check && resultCode == RESULT_OK) {
        ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        lv.setAdapter( new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));

        if(results.contains("hey") || results.contains("a") || results.contains("ay")) {
            //toast referenced to xml the after 400ms
            counter_score++;
            txView.setText("Your Score is" + " " + counter_score);

            AlertDialog dialogBuilder = new AlertDialog.Builder(this).create();
            dialogBuilder.setTitle("AWSOME");
            dialogBuilder.setMessage("¡Your current score is" + counter_score);
            dialogBuilder.setIcon(R.drawable.ic_mark);
            dialogBuilder.show();

            ourSong = MediaPlayer.create(Voice.this, R.raw.rightsound2);
            ourSong.start();
            Thread timer = new Thread() {
                public void run(){
                try {
                    sleep(2500);
                }catch (InterruptedException e){
                    e.printStackTrace();
                } finally {
                    String score = txView.getText().toString();
                    Bundle keeper = new Bundle();
                    keeper.putString("key", score);
                    Intent putScore = new Intent(Voice.this, What.class);
                    putScore.putExtras(keeper);
                    startActivity(putScore);
                }
            }
        };

        timer.start();
    }
}

次のActivity、、WhatはこれBundleを取得し、を使用して正常に表示しますsetText(gotScore)

public class What  extends Activity implements OnClickListener {
    ListView lv;
    static final int check = 111;
    private int counter_score;
    TextView txView;
    MediaPlayer ourSong;
    ImageView display;
    String gotScore;

    String classes[] = {"What", "Pagina", "What", "example3", "example4", "example5", 
                        "example6"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.letter_b);
        initialize();
        Bundle gotKeeper = getIntent().getExtras();
        gotScore = gotKeeper.getString("key");
        txView.setText(gotScore);
    }

    private void initialize() {
        // TODO Auto-generated method stub
        lv = (ListView)findViewById(R.id.lvVoiceReturn);
        Button b = (Button)findViewById(R.id.imageButtonSelector);
        txView = (TextView)findViewById(R.id.counter);
        b.setOnClickListener(this);

..これは物事が悪くなるときです:(

カウンターWhatに関連する別の質問もあります。ユーザーが正解すると、カウンターはビアを1つ追加counter++;します。txview stringただし、 「スコアは1」に変わります。文字列内の前のアクティビティから渡されたカウンターの結果に1を追加することができないため、のカウンターはWhat「スコアは2です」と表示されます。Bundle keeperこれは、集計スコアを保持するの次のアクティビティにパスを取得します。

int詩を渡すことに関するいくつかのチュートリアルを読みましたstringが、彼らが使用するようなコードのいくつかはgetInt認識されません。私は困惑しています。

4

3 に答える 3

0

さまざまなアクティビティ間で共有される「グローバル」クラスを作成し、それを使用して使用される変数を「同期」に保つとどうなりますか?

例-Globals.java:

public class Globals {

  public int counter_score; 

}

そして、を使用してその変数を参照しますGlobals.counter_score

もちろん、その共有クラスを他の変数や関数(たとえば、一般的な操作)にも使用できます。

アップデート

コメント提供者が指摘したように、この方法は特に優れていません。コードが単に参照されていることを忘れており、他のアクティビティの情報を保持するためにそれ自体が「ライブ」ではありません(この方法を修正してくれてありがとう、私はまだ学んでいます...)

ただし、うまく機能する可能性があるのは、2番目のアクティビティを起動するときに、counter_score変数の現在の状態をインテントに渡すことです(例:

IntentToLaunchTheOtherActivity( counter_score );

そして、後で変更された場合は、変数を前のアクティビティに戻すことができます...

于 2012-07-13T22:19:14.597 に答える
0

バンドルしてWhatアクティビティに渡すものは、カウンターではなく、文字列「Yourscoreis1」です。次のアクティビティでその数をインクリメントしたい場合は、整数値だけを送信し、代わりに必要な文字列を作成する必要があります。

intとstringの受け渡しについていくつかの説明を読みましたが、getIntのように使用するコードの一部が認識されません。

getInt()の意味が認識されないかどうかはわかりません。いずれにせよ、あるアクティビティから別のアクティビティにカウンターを渡すときは、自分で物事を簡単にします。それがintであり、受信アクティビティでintのように操作することを計画している場合は、それをintとしてバンドルに追加します。例えば:

    Bundle keeper = new Bundle();
    keeper.putInt("key", counter_score);

そして、バンドルからそれを取得します:

    Bundle gotKeeper = getIntent().getExtras();
    int score = gotKeeper.getInt("key");
于 2012-07-13T21:31:13.007 に答える
0

私はそれを動かしました。基本的に、TJ Thirdが変換keeper.putString("key", counter_score);を提案したものkeeper.putInt("key", counter_score);に変換する必要がありました。また、受信したバンドルを「What」アクティビティ内のintに変換する必要もありました。「What」アクティビティ内で名前を変更int counter_score;int gotKeeper;(これはString gotKeeperでした)、counter_score=0を呼び出す代わりに; 渡されたバンドルがintになったので、counter_score=gotKeeperと呼びました。initialize(); したがって、カウンタースコアは、前のアクティビティ「音声」から生成された結果と等しくなります。

これで、ユーザーが正解すると、counter ++; 既存のcounter_scoreに1つ追加してバンドルし、次のアクティビティに送信して、繰り返しすすぎます。

static final int check = 111;
    int counter_score;
    TextView txView;
    MediaPlayer ourSong;
    ImageView display;
    int gotKeeper;


    String classes[] = {"What", "Pagina", "What", "example3", "example4", "example5", 
    "example6"};


@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.letter_b);
        initialize();
        Bundle gotKeeper = getIntent().getExtras();
        gotKeeper = gotScore.getInt("key");
        counter_score = gotKeeper;

もう一度、あなたの提案と洞察のためにみんなに感謝します。初心者への大きな助け。

于 2012-07-14T21:18:46.973 に答える