如何通过重新启动活动来重置计数器?

时间:2014-07-18 06:53:48

标签: java android counter

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

如果将单个用户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);
}

}

3 个答案:

答案 0 :(得分:2)

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

使用static并不好,因为如果您的应用在后台关闭并稍后恢复,它就会消失。

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

答案 1 :(得分:1)

您可以保存计数器值 onSavedInstanceState

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);

  savedInstanceState.putInt("true_counter", true_counter_value);
  savedInstanceState.putInt("false_counter",false_counter_value);

}

您可以恢复计数器值 onCreate onRestoreInstanceState

您可以将计数器值保存到SharedPreferences的其他方式您可以在此处找到有关从共享偏好设置保存和加载数据的详细信息:How to use SharedPreferences in Android to store, fetch and edit values

答案 2 :(得分:0)

实际上非常简单,只需将您的计数器设为static