2016-10-27 3 views
0

지금까지는. Android Studio에서 간단한 퀴즈 응용 프로그램을 만들었습니다. FirstActivity.java에서 SecondActivity.java라는 Next Activity로 이동 한 후 다음 코드와 같이 버튼을 누르면 finish()가있는 첫 번째 활동을 닫을 때까지 모든 것이 올바르게 작동합니다.Android Studio 뒤로 버튼 문제

public void onClick() { 

    button_next = (Button)findViewById(R.id.nextbtn); 


      button_next.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        startActivity(new Intent(FirstActivity.this, SecondActivity.class)); 
        finish(); 


       } 
      }); 

코드가 훌륭합니다.하지만 두 번째 활동에서 첫 번째 활동으로 이동하려고 할 때 (두 번째 활동을 닫고 첫 번째 활동으로 돌아가려면) finish() 또는 onBackPressed()가 작동하지 않습니다. 응용 프로그램을 완전히 닫습니다. 버튼을 누르 자마자 SecondActivity.class를 닫고 FirstActivity.class로 이동하기 위해 필요한 코드는 무엇입니까?

+0

마침내 전화하지 마시오 –

+0

'finish();이게 무엇을 기대합니까? – njzk2

+0

죄송합니다. 나는 finish()를 사용하고있다. 그래서 응용 프로그램은 메모리를 소비하지 않습니다. 내 앱이 최소한 20-30 개의 질문을 갖고 성능을 유지하기를 원하기 때문에 –

답변

0

이전 활동으로 돌아가고 싶으면 활동을 변경 한 후에 완료하지 마십시오. , 당신은 SecondActivity에서

MyActivityManager.getInstance().pushOneActivity(FirstActivity.this);

를 추가해야는 FirstActivity에서

public class MyActivityManager { 
    private static MyActivityManager instance; 
    private Stack<Activity> activityStack;//activity's stack 
    private MyActivityManager() { 
    } 
    //singleton 
    public static MyActivityManager getInstance() { 
     if (instance == null) { 
      instance = new MyActivityManager(); 
     } 
     return instance; 
    } 
    //push an activity to stack 
    public void pushOneActivity(Activity actvity) { 
     if (activityStack == null) { 
      activityStack = new Stack<Activity>(); 
     } 
     activityStack.add(actvity); 
    } 
    //get last activity,fifo 
    public Activity getLastActivity() { 
     return activityStack.lastElement(); 
    } 
    //remove an activity 
    public void popOneActivity(Activity activity) { 
     if (activityStack != null && activityStack.size() > 0) { 
      if (activity != null) { 
       activity.finish(); 
       activityStack.remove(activity); 
       activity = null; 
      } 
     } 
    } 
    //finish all activity 
    public void finishAllActivity() { 
     if (activityStack != null) { 
      while (activityStack.size() > 0) { 
       Activity activity = getLastActivity(); 
       if (activity == null) break; 
       popOneActivity(activity); 
      } 
     } 
    } 
} 

:

public void onClick() { 
    button_next = (Button) findViewById(R.id.nextbtn); 
    button_next.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(FirstActivity.this, SecondActivity.class)); 
     } 
    }); 
} 
+0

이것은 내가 말하는 것에 대한 것이 아닙니다. 내가 말하는 것은 FirstActivity를 닫고 SecondActivity를 시작하는 것입니다. 하지만 내가 원하는 것은 SecondActivity를 닫고 FirstActivity로 돌아가는 것입니다. –

+0

네, 알고 있습니다.하지만 첫 번째 활동을 마쳤으므로 두 번째 활동으로 이동하면 파손됩니다. 다시 버튼을 누르면 초에서 첫 번째로 돌아가고 싶다면 첫 번째 활동을 파괴하지 마십시오. –

+0

너무 많은 액티비티가 열려있는 경우 앱을 원활하게 실행하려면 어떻게해야합니까? 내 앱에 적어도 20-30 개의 질문이 있기를 바란다. –

0

당신이 그렇게 많은 활동이있는 경우는, 다른 방법 핸들 활동 수명주기가 당신은 FirstActivity 또는 다른 활동으로 가고 싶다 :

startActivity(new Intent(FirstActivity.this, SecondActivity.class)); 
MyActivityManager.getInstance().finishAllActivity(); 
finish();