我的代码中定义了两个计数器。

如果将对单个用户ID的正确答案添加到true_counter上,而将错误的材料添加到fales_counter则对用户给出了错误的答案,但是问题是当活动将计数器重新加载为零时。

package com.Learning.math;

import java.util.Random;

import org.w3c.dom.Text;

import com.Learning.math.R;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

public class Plus extends Activity {
private TextView num11;
private TextView num22;
public Integer no1;

public Integer no2;
Button btn;

@Override
protected void onCreate(Bundle savedInstanceState) {

    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.plus_page);
    // Set Numbers To TextView's
    num11 = (TextView) findViewById(R.id.num1);
    num22 = (TextView) findViewById(R.id.num2);
    Intent iin = getIntent();
    Bundle b = iin.getExtras();
    if (b != null) {
        final String numb1 = (String) b.get("from");
        final String numb2 = (String) b.get("to");
        Integer min = Integer.valueOf(numb1);
        Integer max = Integer.valueOf(numb2);
        Random r1 = new Random();
        int random1 = r1.nextInt(max + -min) + min;
        Random r2 = new Random();
        int random2 = r2.nextInt(max - min) + min;
        String str1 = String.valueOf(random1);
        String str2 = String.valueOf(random2);
        num11.setText(str1 + "");
        num22.setText(str2 + "");
        no1 = Integer.valueOf(str1);
        no2 = Integer.valueOf(str2);
    }

    final EditText answerbox = (EditText) findViewById(R.id.answer_box);
    final ImageView true_pic = (ImageView) findViewById(R.id.imageView1);
    final ImageView false_pic = (ImageView) findViewById(R.id.imageView2);
    final Handler handler = new Handler();
    final TextView afarin = (TextView) findViewById(R.id.afarin_txt);
    final TextView try_again = (TextView) findViewById(R.id.try_again_txt);
    final TextView false_counter_txt = (TextView) findViewById(R.id.true_counter);
    final TextView true_counter_txt = (TextView) findViewById(R.id.false_counter);
    // تعریف فونت طناب
    Typeface tf = Typeface
            .createFromAsset(getAssets(), "fonts/tanab_0.ttf");
    afarin.setTypeface(tf);
    try_again.setTypeface(tf);
    // /////////////
    Button btn = (Button) findViewById(R.id.button1);
    btn.setOnClickListener(new OnClickListener() {

        private int true_counter;
        private int false_counter;

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            String Answr = answerbox.getText().toString();
            Integer answer = Integer.valueOf(Answr);
            if (answer == (no2 + no1)) {
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        // Do something after 3s = 3000ms
                        startActivity(getIntent());
                    }
                }, 2000);

                hideSoftKeyboard(Plus.this);
                true_pic.setVisibility(View.VISIBLE);
                afarin.setVisibility(View.VISIBLE);
                true_counter++;
                true_counter_txt.setText(Integer.toString(true_counter));
            } else {
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        // Do something after 3s = 3000ms
                        startActivity(getIntent());
                    }
                }, 2000);
                hideSoftKeyboard(Plus.this);
                false_pic.setVisibility(View.VISIBLE);
                try_again.setVisibility(View.VISIBLE);
                false_counter++;
                false_counter_txt.setText(Integer.toString(false_counter));
            }
        }
    });
}

// /////////// Hide Keyboard When Clicking
public static void hideSoftKeyboard(Activity activity) {
    InputMethodManager inputMethodManager = (InputMethodManager) activity
            .getSystemService(Activity.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus()
            .getWindowToken(), 0);
}

}

最佳答案

您将要覆盖onSaveInstanceState()方法来写入计数器值,并使用onCreate(Bundle)方法来读取计数器值(在使用前先对包进行空检查)。

使用static不好,因为如果您的应用程序在后台关闭并随后恢复运行,它将消失。

使用sharedPreferences也可以,但是更适合用于长期存储(持久存储在您的应用程序的多次运行中),而实例状态则用于短期使用(持久存储在应用程序的单次运行)。可以将其视为使用共享首选项来存储高分,并使用实例状态来存储当前游戏的数据。

关于java - 如何定义计数器不通过重新启动 Activity 来重置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24818882/

10-13 07:08