在我的應用程序中,我有一個顯示某個級別的列表視圖。如何防止我的活動再次啓動?
我用資產中的文件填充listview。 我的資產文件是這樣的:
<question>
<image>pic1.png</image>
<option1>one.png</option1>
<option2>two.png</option2>
<option3>three.png</option3>
<option4>four.png</option4>
<answer>1</answer>
<level>1</level>
</question>
我的列表視圖中顯示的水平,當我點擊列表視圖的項目轉到另一個活動,到下一個活動顯示了我的問題,我的選擇也是如此。 每一件事情都可以,我的問題是當第二次活動中的按鈕按下第一次活動時,第一次活動再次啓動,我的onCreate方法再次運行,並且我的列表視圖項目增加(例如,如果我有1個問題,之後點擊後退按鈕顯示我的問題變成2)。
這是我的第一個活動:
public class Home extends Activity {
static SharedPreferences prefs;
Editor editor;
HorizontalListView hListView;
MyArrayAdapter listAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
loadObjects();
prefs = getSharedPreferences(DataStore.MY_PREFS_NAME, MODE_PRIVATE);
editor = prefs.edit();
editor.putInt("l" + 1, Question.KEY_UNLOCK);
editor.commit();
hListView = (HorizontalListView) findViewById(R.id.list_view);
listAdapter = new MyArrayAdapter(this, DataStore.questions);
hListView.setAdapter(listAdapter);
hListView.scrollTo(prefs.getInt("level", 0));
hListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int index, long arg3) {
int lock = prefs.getInt("l" + DataStore.questions.get(index).level, Question.KEY_LOCK);
if (lock == Question.KEY_LOCK)
showLockAction();
else {
Intent intent = new Intent(Home.this, MainActivity.class);
intent.putExtra("selected_level", index);
startActivity(intent);
}
}
});
}
protected void showLockAction() {
Toast.makeText(Home.this, "مرحله های قبل و کامل کن", Toast.LENGTH_LONG).show();
}
public void loadObjects() {
String KEY_QUESTION = "question";
String KEY_OPTION1 = "option1";
String KEY_OPTION2 = "option2";
String KEY_OPTION3 = "option3";
String KEY_OPTION4 = "option4";
String KEY_QUESTION_IMAGE = "image";
String KEY_LOCK = "level";
String KEY_ANSWER = "answer";
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromAssets(Home.this);
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_QUESTION);
// looping through all song nodes <song>
for (int i = 0; i < nl.getLength(); i++) {
Element e = (Element) nl.item(i);
Question q = new Question();
q.image = parser.getValue(e, KEY_QUESTION_IMAGE);
q.options.add(parser.getValue(e, KEY_OPTION1));
q.options.add(parser.getValue(e, KEY_OPTION2));
q.options.add(parser.getValue(e, KEY_OPTION3));
q.options.add(parser.getValue(e, KEY_OPTION4));
q.level = Integer.parseInt(parser.getValue(e, KEY_LOCK));
q.answer = Integer.parseInt(parser.getValue(e, KEY_ANSWER));
DataStore.questions.add(q);
}
}
}
我裝入對象方法的運行和反覆運行。
,這裏是我的第二個活動:
public class MainActivity extends Activity {
ImageView questionText;
TextView level;
ImageView option1;
ImageView option2;
ImageView option3;
ImageView option4;
ImageView dialog;
Button nextLevel;
LinearLayout mainLayout;
Question curQuestion;
int curQuestionIndex = 0;
int wrongCounter = 1;
SharedPreferences prefs;
Editor editor;
ArrayList<Integer> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
mainLayout = (LinearLayout) findViewById(R.id.main_lay);
dialog = (ImageView) findViewById(R.id.dialog);
level = (TextView) findViewById(R.id.level);
nextLevel = (Button) findViewById(R.id.next_level);
nextLevel.setOnClickListener(nextLevelClick);
questionText = (ImageView) findViewById(R.id.question);
option1 = (ImageView) findViewById(R.id.option1);
option2 = (ImageView) findViewById(R.id.option2);
option3 = (ImageView) findViewById(R.id.option3);
option4 = (ImageView) findViewById(R.id.option4);
option1.setOnClickListener(clickListener);
option2.setOnClickListener(clickListener);
option3.setOnClickListener(clickListener);
option4.setOnClickListener(clickListener);
prefs = getSharedPreferences(DataStore.MY_PREFS_NAME, MODE_PRIVATE);
editor = prefs.edit();
curQuestionIndex = getIntent().getIntExtra("selected_level", 0);
loadNewQuestion();
}
OnClickListener nextLevelClick = new OnClickListener() {
@Override
public void onClick(View v) {
stopCorrectAnswerAction();
curQuestionIndex++;
loadNewQuestion();
}
};
OnClickListener clickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (curQuestion.isAnswer(v.getId())) {
correctAnswerAction();
} else
wrongAnswerAction();
}
};
private void loadNewQuestion() {
Log.e("load", "@------loading------> " + curQuestionIndex);
if (curQuestionIndex == DataStore.questions.size()) {
gameFinishedAction();
curQuestionIndex = 0;
return;
}
curQuestion = DataStore.questions.get(curQuestionIndex);
editor.putInt("level", curQuestionIndex + 1);
editor.putInt("l" + curQuestion.level, Question.KEY_UNLOCK);
editor.commit();
wrongCounter = 1;
level.setText("مرحله " + curQuestion.level);
dialog.setImageResource(R.drawable.cl_q);
questionText.setImageBitmap(getBitmapFromAsset(curQuestion.image));
option1.setImageBitmap(getBitmapFromAsset(curQuestion.options.get(0)));
option2.setImageBitmap(getBitmapFromAsset(curQuestion.options.get(1)));
option3.setImageBitmap(getBitmapFromAsset(curQuestion.options.get(2)));
option4.setImageBitmap(getBitmapFromAsset(curQuestion.options.get(3)));
}
private void gameFinishedAction() {
// TODO Auto-generated method stub
}
protected void wrongAnswerAction() {
if (wrongCounter % 3 == 1)
dialog.setImageResource(R.drawable.cl_w1);
else if (wrongCounter % 3 == 2)
dialog.setImageResource(R.drawable.cl_w2);
else if (wrongCounter % 3 == 0)
dialog.setImageResource(R.drawable.cl_w3);
wrongCounter++;
}
protected void correctAnswerAction() {
//mainLayout.setAlpha(0.5f);
dialog.setImageResource(R.drawable.cl_c);
nextLevel.setVisibility(View.VISIBLE);
option1.setOnClickListener(null);
option2.setOnClickListener(null);
option3.setOnClickListener(null);
option4.setOnClickListener(null);
//Toast.makeText(getApplicationContext(), "درسته",Toast.LENGTH_LONG).show();
}
protected void stopCorrectAnswerAction() {
//mainLayout.setAlpha(1);
nextLevel.setVisibility(View.INVISIBLE);
option1.setOnClickListener(clickListener);
option2.setOnClickListener(clickListener);
option3.setOnClickListener(clickListener);
option4.setOnClickListener(clickListener);
}
private Bitmap getBitmapFromAsset(String strName) {
AssetManager assetManager = MainActivity.this.getAssets();
InputStream istr = null;
try {
istr = assetManager.open(strName);
} catch (IOException e) {
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeStream(istr);
return bitmap;
}
@Override
public void onBackPressed() {
startActivity(new Intent(MainActivity.this, Home.class));
this.finish();
}
當我做這個方法
@Override
public void onBackPressed() {
startActivity(new Intent(MainActivity.this, Home.class));
this.finish();
}
我的第一個活動的onCreate再次運行。 如何防止此操作?
不要重寫'onBackPressed'和'Home'活動將從堆棧 –
打開,當我打開該活動時,它不會發生任何變化,它會運行ag ain – user7908469