2013-04-20 51 views
0

我已經閱讀了有關關閉當前活動並返回到主活動通過活動棧等,但不幸的是我不斷收到一個空指針,因爲我需要關閉的子活動,我類遊戲正在創建。按鈕返回到MainActivity和結束所有正在運行的孩子活動

這裏是類「遊戲」:

package pap.crowslanding; 


public class Game extends MainActivity implements OnClickListener { 
private MazeBall ball; 
protected static GameView gameV; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tester1); 
    Button settings = (Button) findViewById(R.id.settingsButton); 
    Button mainMenu = (Button) findViewById(R.id.backButton); 

    ball = (MazeBall) findViewById(R.id.mazeball); 
    gameV = (GameView) findViewById(R.id.game_view); 

    settings.setOnClickListener(this); 
     mainMenu.setOnClickListener(this); 

     //Unrequired code removed 

    // IF USER PRESSES ON !Main Menu! 
    public void onClick(View v) { 
     switch (v.getId()){ 
     case R.id.settingsButton: 

     break; 
     case R.id.backButton: 
      onBackPressed(); 
     break; 
    } 
    } 

public void onBackPressed() { 
    this.finish();//try activityname.finish instead of this 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 
} 

我的佈局,R.Layout.tester1是其運行的類GameView和MazeBall,您可以在onCreate方法中看到的自定義佈局,我的空指針指GameView嘗試,因爲它仍在運行,當我想要去我的MainActivity訪問其onDraw()方法。

長話短說,無論如何要終止這些進程?我無法使用標準意義上的finish(),因爲GameView不會擴展Activity。

+0

就不行,甚至' – 2013-04-20 11:35:39

回答

0

我想你可以把每個發射活動在堆棧中,您返回到您的主要活動每次。

這裏是我用來管理我的應用程序中的所有活動的類,每當我輸入一個活動,在onCreate方法中,我調用它的addActivity()方法將活動放入堆棧。每次我一快的活動,在其onDestory方法,我稱之爲經理的finishActivity方法來完成在堆棧中的最新的輸入活動。在你的情況,我想你可以創建彈出,完成以後進入堆棧比在MainActivity的所有活動,並打電話給你返回在MainActivity方法每次的方法。

公共類的AppManager {

private static Stack<Activity> activityStack; 
private static AppManager instance; 

private AppManager(){ 
} 

public static AppManager getInstance() { 
    if(instance == null) 
     instance = new AppManager(); 
    return instance; 
} 

public void addActivity(Activity ac) { 
    if(activityStack == null) 
     activityStack = new Stack<Activity>(); 
    activityStack.add(ac); 
} 

public Activity getCurrentActivity(){ 
    if(activityStack == null) 
     return null; 
    return activityStack.lastElement(); 
} 

public void finishActivity(Activity ac) { 
    if(activityStack != null && ac != null){ 
     activityStack.remove(ac); 
     ac.finish(); 
     ac = null; 
    } 
} 

public void finishActivity() { 
    if(activityStack != null) { 
     Activity ac = activityStack.lastElement(); 
     finishActivity(ac); 
    } 
} 

public void finishActivity(Class<?> cls) { 
    if(activityStack == null) 
     return; 
    for(Activity ac: activityStack){ 
     if(ac.getClass().equals(cls)){ 
      finishActivity(ac); 
     } 
    } 
} 

public void finishAllActivity(){ 
    if(activityStack == null) 
     return; 
    Activity ac; 
    for(int i = 0, size = activityStack.size(); i < size; i ++) { 
     ac = activityStack.get(i); 
     if(ac != null) { 
      ac.finish(); 
     } 
    } 
    activityStack.clear(); 
} 

public void appExit(Context context) { 
    try { 
     finishAllActivity(); 
     System.exit(0); 
    } catch (Exception e) { 
     Log.e("AppManager", "exit error:" + e.getMessage()); 
    } 
} 

}

0

如果其非活性類您需要的活動環境。將上下文傳遞給非活動類的構造函數。使用上下文來啓動活動。

context.startActivity(myIntent); 

您需要清除活動回棧。

case R.id.backButton: 
     onBackPressed(); 
    break; 


public void onBackPressed() { 
Intent myIntent = new Intent(MyActivity.this, MainActivity.class) 
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(myIntent); 
finish(); 
return; 
} 
與`(Intent.FLAG_ACTIVITY_NEW_TASK)一起使用時
+0

有沒有簡單地只是進入某種形式的「完成()」在我的GameView方法延伸SurfaceView方式,即是問題 – 2013-04-20 22:36:58

相關問題