0

現在のアクティビティを閉じて、アクティビティ スタックなどを介してメイン アクティビティに戻ることについて読みましたが、クラスのゲームが作成している子アクティビティを閉じる必要があるため、残念ながら NullPointer を受け取り続けます。

クラス「ゲーム」は次のとおりです。

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メソッド内で確認できます。私の NullPointer は、メソッドにアクセスしようとしている GameView を参照してonDraw()います。

とにかく、これらのプロセスを終了するには?GameView は Activity を拡張しないため、標準的な意味での finish() は使用できません。

4

2 に答える 2

0

メインアクティビティに戻るたびに、各起動アクティビティをスタックに入れることができると思います。

これは、アプリの 1 つですべてのアクティビティを管理するために使用したクラスです。アクティビティに入るたびに、onCreate メソッドで addActivity() メソッドを呼び出してアクティビティをスタックに入れます。アクティビティを高速化するたびに、onDestory メソッドで Manager の 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());
    }
}

}

于 2013-04-20T12:41:27.970 に答える