Java 如何重新加载已保存以前状态的活动?
我有一个游戏活动,我使用sqlite数据库随机填充一些按钮,没有重复,当游戏结束时,我弹出一个带有OK按钮和一些信息的警报对话框。现在,当我按下OK时,我需要关闭弹出窗口,并在游戏活动中重新加载一些其他数据到我的按钮上,而不重复。这件事我得做两次。我在我的另一个游戏中这样做,但弹出窗口没有OK按钮,它会弹出3秒钟,然后使用handler关闭,我的活动会在不重复的情况下重新加载新数据,这就像一个符咒。在这个游戏中,只有OK按钮是不同的,它不起作用。我需要那个OK按钮。我有两个问题Java 如何重新加载已保存以前状态的活动?,java,android,sqlite,Java,Android,Sqlite,我有一个游戏活动,我使用sqlite数据库随机填充一些按钮,没有重复,当游戏结束时,我弹出一个带有OK按钮和一些信息的警报对话框。现在,当我按下OK时,我需要关闭弹出窗口,并在游戏活动中重新加载一些其他数据到我的按钮上,而不重复。这件事我得做两次。我在我的另一个游戏中这样做,但弹出窗口没有OK按钮,它会弹出3秒钟,然后使用handler关闭,我的活动会在不重复的情况下重新加载新数据,这就像一个符咒。在这个游戏中,只有OK按钮是不同的,它不起作用。我需要那个OK按钮。我有两个问题 我成功地重新加载
public class ToploHladno extends Activity implements View.OnClickListener{
Button b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, bIzlaz, bDalje;
String mButtonText1, mButtonText2, mButtonText3, mButtonText4, mButtonText5, mButtonText6,
mButtonText7, mButtonText8, mButtonText9, mButtonText10, opis, odgovorNormalized;
MediaPlayer buttonClicks, buttonFinal, buttonBack;
public boolean music;
final Context context = this;
Editable ukucanRezultat;
String tacanRezultat, ukucanRezultatVelikaSlova;
int brojPoena;
int counter = 0;
LinkedList<Long> mAnsweredQuestions = new LinkedList<Long>();
private String generateWhereClause(){
StringBuilder result = new StringBuilder();
for (Long l : mAnsweredQuestions){
result.append(" AND _ID <> " + l);
}
return result.toString();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game);
addListenerOnButton();
nextQuestion();
}
private void addListenerOnButton() {
b1 = (Button) findViewById(R.id.button1);
b2 = (Button) findViewById(R.id.button2);
b3 = (Button) findViewById(R.id.button3);
b4 = (Button) findViewById(R.id.button4);
bIzlaz = (Button) findViewById(R.id.bIzlaz);
bDalje = (Button) findViewById(R.id.bDalje);
}
public void nextQuestion() {
counter++;
TestAdapter mDbHelper = new TestAdapter(this);
mDbHelper.createDatabase();
try{
mDbHelper.open();
Cursor c = mDbHelper.getTestData(generateWhereClause());
mAnsweredQuestions.add(c.getLong(0));
mButtonText1 = c.getString(2);
mButtonText2 = c.getString(3);
mButtonText3 = c.getString(4);
mButtonText4 = c.getString(5);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
b3.setOnClickListener(this);
b4.setOnClickListener(this);
if(counter < 3){
b1.setText("30 poena");
b2.setText("25 poena");
b3.setText("22 poena");
b4.setText("20 poena");
}else{
finish();
}
}
finally{
mDbHelper.close();
}
}
如果我理解正确,您正在使用
意图
从弹出窗口的opis活动
重新启动ToploHladno活动。如果ToploHladno活动
尚未完成(我认为它尚未完成),那么就不需要意图
。在调用setText()
或对这些视图进行任何更改后,您可以在视图上调用invalidate()
,以在onResume()中重新填充该视图
@Override
public void onResume()
{
// change your Buttons however you need in here then say you have btn1
btn1.invalidate();
}
您的第一个活动
尚未完成,因此您不需要,甚至可能不想以意图开始它。关闭对话框活动后,您将返回到该对话框,并将调用onResume()
,以便您可以在其中执行所需操作。这将阻止您通过不创建活动
的新实例来重新绘制整个布局
。请告诉我这是否适用于您的需要
startActivityForResult()
示例:
然后在弹出式活动中
public class Popup_opis extends Activity implements OnClickListener{
TextView tvOpis;
int brojPoenaPrimljeno;
Button OK;
int counter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.popup_opis);
//Get intent
Intent recIntent = getIntent();
counter = recIntent.getIntExtra("counter"); //get counter variable from previous activity
OK.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
counter++;
Intent intent = new Intent(Popup_opis.this, ToploHladno.class);
intent.putExtra("counter", counter); //SEND BACK COUNTER
setResult(RESULT_OK, intent); // send result
finish();
那么在你之前的活动中
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
// would use REQUEST CODE sent earlier if more than one activity sends back intents here
if (resultCode == RESULT_OK)
{
counter = data.getInteExtra("counter", 0); // get updated counter variable
}
}
我想它还没有完成,因为当我按下手机上的“后退”按钮时,它就在那里。怎么做invalidate()呢?好的,这是我的游戏课。但是如果我不使用intent,如何在OK按钮上调用此按钮?您可以从其他活动中使用postInvalidate()
,但只需在弹出的活动中调用finish()
,并在单击OK
和onResume()时删除intent
)
将为您的其他活动调用
我会尝试,但我想我的button.setEnable()操作和计数器会遇到一些问题。让我先试试。哪儿也别去正如我所想。单击“确定”后,我设置文本,但我的第一个按钮被禁用。第二次单击“确定”后,所有“我的”按钮都被禁用,只有最后一个按钮被启用。而且,计数器不工作。此外,我的mAnsweredQuestions对象不起作用,因为我得到了相同的问题:((
public class Popup_opis extends Activity implements OnClickListener{
TextView tvOpis;
int brojPoenaPrimljeno;
Button OK;
int counter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.popup_opis);
//Get intent
Intent recIntent = getIntent();
counter = recIntent.getIntExtra("counter"); //get counter variable from previous activity
OK.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
counter++;
Intent intent = new Intent(Popup_opis.this, ToploHladno.class);
intent.putExtra("counter", counter); //SEND BACK COUNTER
setResult(RESULT_OK, intent); // send result
finish();
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
// would use REQUEST CODE sent earlier if more than one activity sends back intents here
if (resultCode == RESULT_OK)
{
counter = data.getInteExtra("counter", 0); // get updated counter variable
}
}