我的代码中定义了两个计数器。
如果将对单个用户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/