마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

뒤로 가기 두번눌렀을때 새 액티비티 불러오기

0 추천

제목 그대로 백버튼 두번눌렀을때 종료하는게 아니라 새 액티비티를 불러올려고 하는데 (이거 액티비티 다음에 종료하려고 합니다) 코드는 구글링해서 

 

import android.app.Activity;

import android.widget.Toast;

 

public class BackPressCloseHandler {

    private long backKeyPressedTime = 0;

    private Toast toast;

 

    private Activity activity;

 

    public BackPressCloseHandler(Activity context) {

        this.activity = context;

    }

 

    public void onBackPressed() {

        if (System.currentTimeMillis() > backKeyPressedTime + 2000) {

            backKeyPressedTime = System.currentTimeMillis();

            showGuide();

            return;

        }

        if (System.currentTimeMillis() <= backKeyPressedTime + 2000) {

            activity.finish();

            toast.cancel();

        }

    }

 

    private void showGuide() {

        toast = Toast.makeText(activity, "\'뒤로\'버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT);

        toast.show();

    }

}

 

하고 

 

public class MainActivity extends AppCompatActivity {

    private BackPressCloseHandler backPressCloseHandler;    

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        backPressCloseHandler = new BackPressCloseHandler(this);

    }

 

    @Override

    public void onBackPressed() {

        // TODO Auto-generated method stub

        backPressCloseHandler.onBackPressed();

    }

 

를 메인엑티비티에 넣었을땐 잘 실행되더라고요 (종료가 정상적으로 됬습니다)

 

여기서 새 액티비티 불러올라고 

if (System.currentTimeMillis() <= backKeyPressedTime + 2000) {

            activity.finish();

            toast.cancel();

 

여기서 

if (System.currentTimeMillis() <= backKeyPressedTime + 2000) { 

Intent outintent = new Intent(getApplicationContext(), Outtro.class);

 startActivity(outintent);

 toast.cancel();

}

이렇게 적어서 에뮬실행시키는데 자꾸 오류뜨면서꺼져버립니다; 

 

코드상에는 빨건줄은 안뜨는데.. 뭐가 문제죠?

껄껄앱 (1,910 포인트) 님이 2016년 2월 17일 질문

2개의 답변

0 추천
 
채택된 답변
public class MainActivity extends AppCompatActivity {

    private BackPressCloseHandler backPressCloseHandler;    
	
	static Context mContext; //추가
 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        backPressCloseHandler = new BackPressCloseHandler(this);

		mContext = this;

    }

 

    @Override

    public void onBackPressed() {

        // TODO Auto-generated method stub

        backPressCloseHandler.onBackPressed();

    }



	if (System.currentTimeMillis() <= backKeyPressedTime + 2000) { 

	 Intent outintent = new Intent(mContext, Outtro.class); //getapplication 대신

	 startActivity(outintent);

	 toast.cancel();

}

 

 

한번 이런식으로해보시겠어여? 복붙해서 손코딩한거라 오타가있을지도..

sadeva (21,550 포인트) 님이 2016년 2월 17일 답변
껄껄앱님이 2016년 2월 17일 채택됨
감사합니다!  제 실수였네요;; 매니페스트 등록을 안했습니다 ㅠ 채택은 포인트 적으신분 드릴께요..
0 추천

getApplicationContext() 이 아닌 activity객체를 넣으시고

activity.startActivity(intent); 이런식으로 해야 할거 같은데요.

저 핸들러 객체는 액티비티를 상속받은것이 아니라서 저렇게 하면 붉은줄 뜰거 같은데요??

chemkaaa (6,030 포인트) 님이 2016년 2월 17일 답변
getApllicationContext() 빼고 mainactivity 넣으니까 빨간줄뜨고 activity 넣으니까 빨간줄 안뜨는데 에뮬 실행시키면 작동이 안되네요 ; 바로 팅겨요 ㅠㅠ
...