Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何重新加载已保存以前状态的活动?_Java_Android_Sqlite - Fatal编程技术网

Java 如何重新加载已保存以前状态的活动?

Java 如何重新加载已保存以前状态的活动?,java,android,sqlite,Java,Android,Sqlite,我有一个游戏活动,我使用sqlite数据库随机填充一些按钮,没有重复,当游戏结束时,我弹出一个带有OK按钮和一些信息的警报对话框。现在,当我按下OK时,我需要关闭弹出窗口,并在游戏活动中重新加载一些其他数据到我的按钮上,而不重复。这件事我得做两次。我在我的另一个游戏中这样做,但弹出窗口没有OK按钮,它会弹出3秒钟,然后使用handler关闭,我的活动会在不重复的情况下重新加载新数据,这就像一个符咒。在这个游戏中,只有OK按钮是不同的,它不起作用。我需要那个OK按钮。我有两个问题 我成功地重新加载

我有一个游戏活动,我使用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
        }
    }