2013-04-15 9 views
1

이상한 문제가 발생했습니다.뒤로 키 작동시 뒤로 돌아 가지 않음

뒤로 키를 누르면 다시 돌아 가지 않습니다. 이 여기

04-15 19:24:09.063: V/Activity(23041): Tracking Key Up, activity is resumed: false 

을 보여주는 로그 캣에서 내가이 슬라이더 활동을 열고 버튼을 다시 누르면 MainActivity의

package com.sandy.letsfixthat; 

import android.app.Activity; 
import android.app.LocalActivityManager; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.widget.TabHost; 
import android.widget.TabHost.TabSpec; 


public class Slider extends Activity { 
    TabSpec beginer,inter,dev; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.slider); 
     TabHost th = (TabHost)findViewById(R.id.tabhost); 

     LocalActivityManager mLocalActivityManager = new LocalActivityManager(this, false); 

     // state will be bundle your activity state which you 
     // get in onCreate 
     mLocalActivityManager.dispatchCreate(savedInstanceState); 
     th.setup(mLocalActivityManager); 
     //tab for beginner 
     beginer = th.newTabSpec("Begin"); 
     beginer.setIndicator("Beginner"); 
     Intent begin = new Intent(this, Beginner.class); 
     beginer.setContent(begin); 
     th.addTab(beginer); 

     //tab for intermediate 
     inter = th.newTabSpec("Inter"); 
     inter.setIndicator("Intermediate"); 
     Intent Intermediate = new Intent(this, Intermediate.class); 
     inter.setContent(Intermediate); 
     th.addTab(inter); 

     //tab for developers 
     dev = th.newTabSpec("Devel"); 
     dev.setIndicator("Other"); 
     Intent develop = new Intent(this, Developer.class); 
     dev.setContent(develop); 
     th.addTab(dev); 
    } 

    public boolean onCreateOptionsMenu(android.view.Menu menu) { 
     // TODO Auto-generated method stub 
     super.onCreateOptionsMenu(menu); 
     MenuInflater blowUp = getMenuInflater(); 
     blowUp.inflate(R.menu.menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // TODO Auto-generated method stub 
     switch (item.getItemId()){ 
     case R.id.aboutUs: 
      Intent i = new Intent(this,About.class); 
      startActivity(i); 
      break; 

     case R.id.exit: 
      finish(); 
      break; 

    /* case R.id.setting: 
      Intent setting = new Intent (this,Settings.class); 
      startActivity(setting); 
      break;       */ 
     } 
     return false; 
    } 

    @Override 
    public void onPause() { 
     // your code. 
     super.onPause(); 
     finish(); 
    } 
} 

코드

package com.sandy.letsfixthat; 

import android.os.Bundle; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class MainActivity extends Activity implements OnClickListener { 
    Button go; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     go = (Button)findViewById(R.id.bgo); 
     go.setOnClickListener(this); 

    } 

    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     switch (arg0.getId()){ 
     case R.id.bgo: 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage("NOTE:- this is an initial release. MORE TUTORIAL COMING IN NEXT UPDATE") 
        .setCancelable(false) 
        .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        // do things 
        Intent i = new Intent(MainActivity.this,Slider.class); 
        startActivity(i); 
       } 
      }); 
      AlertDialog alert = builder.create(); 
      alert.show(); 
      break; 
     } 
    } 

    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 
     finish(); 
    } 
} 

, 아무 일도 발생하지 않습니다 활동에 대한 내 코드입니다 . 뒤로 버튼을 눌렀을 때해야 할 일은 APP를 종료하는 것입니다.

+1

왜 onPause()에서 finish()를 호출 했습니까? – Analizer

+0

다른 활동으로 이동할 때 활동을 일시 중지하려면 – sandygautam

+1

일시 중지하지 않고 끝냅니다. 예를 들어, 앱이 백그라운드에 배치되면 파괴 될 것이므로 되돌아 가지 않습니다. – Analizer

답변

0

는 당신과 함께 뒤로 버튼 기능을 재정의 할 수

public void onBackPressed(){ 
    finish(); 
} 

이 때문에 앱을 종료합니다. 이 방법이 최상의 솔루션은 아니므로 on 일시 중지 방법에서 finish()를 사용하면 안됩니다.

+0

나는 이것을 시도했지만 ..이 역시 작동하지 않습니다. ( – sandygautam

+1

표준 동작 뒤로 버튼을 눌렀을 때 액티비티를 끝내는 것입니다.이 메서드를 재정의 할 필요가 없습니다. 그는 표준 행동. 이 솔루션은 유용하지 않습니다. –

+0

하지만 버튼을 다시 작동 시키려면 어떻게해야합니까 ?? – sandygautam

1

는이 라인을 추가

mLocalActivityManager.dispatchResume(); 

나를 위해 일했다!

+0

제안 된 수정으로 인해 문제가 해결되는 이유를 설명하는 등보다 실질적인 답을 줄 수있는 경우 유용 할 수 있습니다. – sandrstar

+1

정말 문제를 해결하는 방법을 모르겠지만이 문제를 해결할 때이 "dispatchResume() - 해당 onResume() 컨테이너에서 호출하여 LocalActivityManager 보유하고있는 작업에 해당 작업을 수행 할 수 있습니다 . " 그래서 LocalActivityManager가이를 'Manage'라고 부르면됩니다. 희망이 도움이됩니다. –

0

일반적으로 활동을 종료하려면 뒤로 버튼에 대해 아무 것도하지 않아도됩니다. 당신이해야 할 일은 이 아닌입니다. onBackButtonPressed() 또는 onKeyDown()입니다. 또는 onKeyDown()을 재정의 한 경우 KEYCODE_BACK 키 코드에 대해 false를 반환하는 이외의 작업을 수행하지 마십시오. 이 단지 활동 아닌 응용 프로그램을 종료

참고. 전체 응용 프로그램을 종료하려면 조금 까다 롭습니다. 그게 네가하고 싶었던 일이라면 알려줘. 나는이 대답을 확장 할 것이다.

관련 문제