![](/img/trans.png)
[英]App crashes when switching from cocos2d-x activity to another activity on Android
[英]App crashes when switching from activity 1 to activity 2
在我的應用程序中,有很多活動被稱為關卡。 一種活動是獎勵活動。 當我贏得1級時,獎勵活動開始。 現在我想重播1級。 為此,我使用了getExtra()。 單擊重播按鈕時,我的應用程序崩潰。
Houselevel1.java
public void getReward(){
if(count == 3) {
Intent intent = new Intent("com.creatives.arfa.revealthesecretsgame.Reward");
intent.putExtra("activity", "level1");
startActivity(intent);
}
}
HouseLevel2.java
public void getReward(){
if(count == 3) {
Intent intent = new Intent("com.creatives.arfa.revealthesecretsgame.Reward");
intent.putExtra("activity", "level2");
startActivity(intent);
}
}
Reward.java
public void replayLevel() {
replay = (ImageButton) findViewById(R.id.replay);
Intent intent= getIntent();
activity = intent.getStringExtra("activity");
replay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View paramView) {
if(activity.equals("level2")){
Intent intent = new Intent("com.creatives.arfa.revealthesecretsgame.HouseLevel2");
startActivity(intent);
}
if(activity.equals("level1")){
Intent intent = new Intent("com.creatives.arfa.revealthesecretsgame.Houselevel1");
startActivity(intent);
}
}
});
}
如果您只想從活動1或活動2轉到“獎勵”活動,則搶些東西並將其發送回任一活動。 您要做的是startActivityForResult,您傳遞一個ID(常數)以執行對Reward活動的操作,將需要返回的內容打包到Bundle中,並將ActivtyResult設置為OK,然后關閉活動。 您的應用將返回給Activity1或2,無論誰調用它。 在這些活動上,您將重寫onActivityResult方法。在此,您將檢查結果的來源ID是否是您在startActivityForResult上發送的ID,以及狀態是否正常。 然后,您就可以對“獎勵”活動進行任何設置。 獎勵活動無需知道它來自何處,只要能獲取一些數據即可。 因此,您以后可以擁有一個調用Reward活動的Activity3,而無需修改Reward活動。 在這里說明檢查接受的答案。 如何在Android上管理`startActivityForResult`?
使用您發布的Java代碼,在Reward.java
文件中,嘗試創建另一個Intent Object,其名稱與在其上方的作用域中聲明的名稱相同。 因此,構建將永遠不會成功。
另外,在聲明意圖時,必須傳遞activity_name.class
文件。
您可以嘗試以下操作:
1)HouseLevel1.java
public void getReward(){
if(count == 3) {
Intent intent = new Intent(getApplicationContext(), com.creatives.arfa.revealthesecretsgame.Reward.class);
intent.putExtra("activity", "level1");
startActivity(intent);
}
}
2)HouseLevel2.java
public void getReward(){
if(count == 3) {
Intent intent = new Intent(getApplicationContext(), com.creatives.arfa.revealthesecretsgame.Reward.class);
intent.putExtra("activity", "level2");
startActivity(intent);
}
}
3)Reward.java
public void replayLevel() {
replay = (ImageButton) findViewById(R.id.replay);
Intent intent= getIntent();
activity = intent.getStringExtra("activity");
replay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View paramView) {
if(activity.equals("level2")){
Intent intent = new Intent(getApplicationContext(), com.creatives.arfa.revealthesecretsgame.HouseLevel2.class);
startActivity(intent);
}
else if(activity.equals("level1")){
Intent intent = new Intent(getApplicationContext(), com.creatives.arfa.revealthesecretsgame.Houselevel1.class);
startActivity(intent);
}
}
});
}
另外,如果您只是使用Reward.java
文件獲取先前意圖的數據,執行一些計算並將一些數據發送回調用或父活動,則可以簡單地使用startActivityForResult()
方法,該方法需要關心您要手動執行的操作。
這是一篇小文章,可能會幫助您解決問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.