2014-09-19 78 views
0

我有一個應用程序中的主要活動顯示了一個問題,有真正的按鈕假按鈕和欺騙按鈕 當用戶按下正確的選項,聽者會舉杯正確..否則監聽器將不正確的敬酒節能狀態,而旋轉

現在,當我們按下按鈕作弊新的活動推出,有一個TextView「你確定你要作弊?」,另一個TextView的是空白,表演接聽按鈕..

當用戶按下顯示答案按鈕,將空白文本視圖設置爲問題的答案(如主要活動中所述)

當用戶返回true和false按鈕onClickListeners現在設置爲敬酒「作弊是錯誤的」

我已經聲明瞭布爾值設置爲false,布爾值設置爲True,我將它保存在捆綁包中,以便當用戶旋轉屏幕時,變量的值在被調用的onCreate(..)方法上不會被覆蓋。

我試着用eclipse中的斷點調試,值是在主要活動仍然沒有被覆蓋「作弊是錯誤的」沒有出現,它顯示正確或不正確..

QuizActivity:Launcher Activity CheatAc tivity:對的onCreate啓動的活動 TrueFalse活動:創建帶有字段(問題和答案)

以下對象的數組代碼:QuizActivity.java(發射活動)

package com.mhrsolanki2020.geoquiz; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class QuizActivity extends ActionBarActivity { 

private Button mTrueButton, mFalseButton, mNextButton, mCheatButton; 
private TextView mQuestionTextView; 
private static final String KEY_INDEX = "index"; 
private static final String TAG = "QuizActivity"; 
private TrueFalse[] mQuestionBank = new TrueFalse[] { 
     new TrueFalse(R.string.question_oceans, true), 
     new TrueFalse(R.string.question_mideast, false), 
     new TrueFalse(R.string.question_africa, false), 
     new TrueFalse(R.string.question_americas, true), 
     new TrueFalse(R.string.question_asia, true) }; 

private int mCurrentIndex = 0; 
private boolean mIsCheater; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_quiz); 

    mQuestionTextView = (TextView) findViewById(R.id.question_text_view); 

    mTrueButton = (Button) findViewById(R.id.true_button); 
    mTrueButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      checkAnswer(true); 
     } 
    }); 

    mFalseButton = (Button) findViewById(R.id.false_button); 
    mFalseButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      checkAnswer(false); 

     } 
    }); 

    mNextButton = (Button) findViewById(R.id.next_button); 
    mNextButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length; 

      updateQuestion(); 
      mIsCheater=false; 

     } 
    }); 

    mCheatButton = (Button) findViewById(R.id.cheat_button); 
    mCheatButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(QuizActivity.this, CheatActivity.class); 
      boolean answer = mQuestionBank[mCurrentIndex].isTrueQuestion(); 
      i.putExtra(CheatActivity.EXTRA_ANSWER_IS_TRUE, answer); 
      startActivityForResult(i, 0); 
     } 
    }); 

    if (savedInstanceState != null) 
     mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0); 

    updateQuestion(); 

} 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    savedInstanceState.putInt(KEY_INDEX, mCurrentIndex); 
} 

private void updateQuestion() { 

    int question = mQuestionBank[mCurrentIndex].getQuestion(); 
    mQuestionTextView.setText(question); 

} 

private void checkAnswer(boolean userPressedTrue) { 
    boolean answerIsTrue = mQuestionBank[mCurrentIndex].isTrueQuestion(); 
    int messageResId = 0; 
    if (mIsCheater) { 
     messageResId = R.string.judgement_toast; 
    } else { 
     if (userPressedTrue == answerIsTrue) { 
      messageResId = R.string.correct_toast; 
     } else { 
      messageResId = R.string.incorrect_toast; 
     } 
    } 
     Toast.makeText(this, messageResId, Toast.LENGTH_LONG).show(); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.quiz, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (data == null) { 
     return; 
    } else { 
     mIsCheater = data.getBooleanExtra(CheatActivity.EXTRA_ANSWER_SHOWN, 
       false); 
     Log.d(TAG, "Value of mIsCheater : " + mIsCheater); 
    } 
} 
} 

下面是代碼: CheatActivity.java

package com.mhrsolanki2020.geoquiz; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class CheatActivity extends Activity { 

public static final String EXTRA_ANSWER_IS_TRUE = "com.mhrsolanki2020.geoquiz.anwer_is_true "; 
public static final String EXTRA_ANSWER_SHOWN = "com.mhrsolanki2020.geoquiz.answer_shown"; 
public static final String EXTRA_IS_ANSWER_SHOWN = "com.mhrsolanki2020.geoquiz.answer_is_shown"; 
boolean mCorrectAnswer; 
private TextView mAnswerTextView; 
private Button mShowAnswer; 
private Boolean mIsAnswerShown; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_cheat); 
    mCorrectAnswer = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE, 
      false); 
    mShowAnswer = (Button) findViewById(R.id.showAnswerButton); 
    mAnswerTextView = (TextView) findViewById(R.id.answerTextView); 

    if (savedInstanceState != null) { 
     mIsAnswerShown = savedInstanceState.getBoolean(
       EXTRA_IS_ANSWER_SHOWN, false); 
    } else { 
     mIsAnswerShown = false; 
    } 

    mShowAnswer.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (mCorrectAnswer) { 
       mAnswerTextView.setText(R.string.true_button); 

      } else { 
       mAnswerTextView.setText(R.string.false_button); 
      } 
      setAnswerShownResult(true); 
     } 
    }); 

} 

public void setAnswerShownResult(boolean isAnswerShown) { 
    Intent data = new Intent(); 
    mIsAnswerShown = isAnswerShown; 

    data.putExtra(EXTRA_ANSWER_SHOWN, mIsAnswerShown); 
    setResult(RESULT_OK, data); 
} 

@Override 
protected void onSaveInstanceState(Bundle savedInstanceState) { 
    savedInstanceState.putBoolean(EXTRA_IS_ANSWER_SHOWN, mIsAnswerShown); 

} 

} 

以下是代碼:TrueFalse.java 包com.mhrsolanki2020.geoquiz;

public class TrueFalse { 
private int mQuestion; 

private boolean mTrueQuestion; 

public TrueFalse(int question, boolean trueQuestion) { 
    mQuestion = question; 
    mTrueQuestion = trueQuestion; 

} 

public int getQuestion() { 
    return mQuestion; 
} 

public void setQuestion(int question) { 
    mQuestion = question; 
} 

public boolean isTrueQuestion() { 
    return mTrueQuestion; 
} 

public void setTrueQuestion(boolean trueQuestion) { 
    mTrueQuestion = trueQuestion; 
} 
} 

回答

0

http://developer.android.com/guide/topics/resources/runtime-changes.html檢查此鏈接

爲了定向支持,爲此在manifest.xml中

 <activity android:name=".MyActivity" 
     android:configChanges="orientation|keyboardHidden" 
     android:label="@string/app_name"> 

在類文件,覆蓋的onSaveInstanceState(捆綁outState)。

+0

在這兩個活動我已覆蓋onSaveInstanceState .. – 2014-09-19 10:15:20