簡體   English   中英

從活動1切換到活動2時,應用崩潰

[英]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()方法,該方法需要關心您要手動執行的操作。

這是一篇小文章,可能會幫助您解決問題

http://www.vogella.com/tutorials/AndroidIntent/article.html#retrieving-result-data-from-a-sub-activity

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM