0

我有一个类Voice,它扩展Activity并包含一个计数器。当用户回答正确时,计数器通过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”中的下一个活动“什么”。

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我还有一个与柜台相关的问题。当用户正确回答时,计数器会添加一个过孔counter++;,并且确实如此。但是,它将更改txview string为“您的分数为 1”。我无法将它添加到从字符串中上一个活动传递的计数器结果中,以便计数器What读取“你的分数是 2”。这将传递给 中的下一个活动Bundle keeper,该活动保存总分。

我已经阅读了一些关于传递intverses a的教程string,但是他们使用的一些代码getInt无法识别。我难住了。

4

3 回答 3

0

如果您创建一个“全局”类以在不同的活动之间共享,并使用它来保持使用的变量“同步”?

例如 - Globals.java:

public class Globals {

  public int counter_score; 

}

然后使用引用该变量Globals.counter_score

当然,您也可以将该共享类用于其他变量和函数 - 例如常见操作。

更新

正如评论者指出的那样,这种方法并不是特别好 - 我忘记了代码只是简单地引用,并且不会自行“生存”以保留其他活动的信息(感谢您在那个问题上纠正我,我还在学习中……)

但是,可以更好地工作的方法是在您启动第二个活动时在意图中传递 counter_score 变量的当前状态 - 例如:

IntentToLaunchTheOtherActivity( counter_score );

如果之后发生更改,则可能会将变量传递回先前的活动......

于 2012-07-13T22:19:14.597 回答
0

我得到它的工作。本质上,我需要 TJ Third 建议转换keeper.putString("key", counter_score);为的内容keeper.putInt("key", counter_score);,我还需要将接收到的捆绑包转换为“什么”活动中的 int。在“什么”活动中,我重命名了int counter_score;int gotKeeper;(这是 String gotKeeper),而不是调用 counter_score =0; 现在传递的包是一个 int,我叫 counter_score = gotKeeper; 在初始化()下;所以计数器分数等于上一个活动“语音”生成的结果。

现在当用户正确回答时,counter++;将一个添加到现有的 counter_score 并将其捆绑并将其发送到下一个活动,然后冲洗重复。

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 回答
0

您捆绑并传递给 What 活动的不是计数器,而是字符串“您的分数为 1”。如果您想在下一个活动中增加该数字,那么您应该只发送整数值并在那里构造您需要的任何字符串。

我已经阅读了一些关于传递 int 与字符串的 tuts..但是他们使用的一些代码(如 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 回答