현재 알림이 표시되면 알림 표시 줄에도 알림이 표시되는 활동이 있습니다.
이것은 사용자가 집을 누르고 활동이 배경으로 밀릴 때 알림을 통해 활동으로 돌아갈 수 있도록하기위한 것입니다.
사용자가 뒤로 버튼을 누르면 문제가 발생하지만 내 활동이 손상되지만 사용자가 뒤로 밀 수는 있지만 알림을 통해 여전히 활동에 도달 할 수 있도록 알림은 유지됩니다. 그러나 USER가 이것을 시도하면 Null Pointers가 이전 활동을 다시 가져 오는 대신 새로운 활동을 시작하려고 시도합니다.
본질적으로 뒤로 버튼이 홈 버튼과 똑같이 작동하기를 원하며 여기에 내가 지금까지 시도한 방법이 있습니다.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
Log.d("CDA", "onKeyDown Called");
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
return;
}
그러나 위의 코드는 여전히 내 활동을 파괴 할 수있는 것처럼 보입니다. 뒤로 버튼을 누를 때 활동이 파괴되는 것을 어떻게 막을 수 있습니까?
답변
키 리스너를 제거하거나 true
가지고 있으면 돌아옵니다 KEY_BACK
.
뒤로 키를 잡으려면 다음이 필요합니다 ( super in 을 호출하지 마십시오 onBackPressed()
).
또한 백그라운드에서 서비스를 실행하려는 경우 startForeground()
알림을 계속 확인해야합니다. 그렇지 않으면 메모리를 확보해야하는 경우 Android에서 서비스를 종료합니다.
@Override
public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
}
답변
한 줄의 코드로만 구현하는 것이 더 쉬웠습니다.
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
답변
나는 당신이 원하는 것은 뒤로 버튼을 재정의하는 것이 아니라 좋은 생각처럼 보이지 않습니다-안드로이드 OS는 그 동작을 정의하고 왜 변경합니까?) 활동 수명주기 를 사용하고 설정 / 데이터를 onSaveInstanceState (Bundle) 이벤트.
@Override
onSaveInstanceState(Bundle frozenState) {
frozenState.putSerializable("object_key",
someSerializableClassYouWantToPersist);
// etc. until you have everything important stored in the bundle
}
그런 다음 onCreate (Bundle) 을 사용 하여 지속 된 번들에서 모든 것을 꺼내고 상태를 다시 만듭니다.
@Override
onCreate(Bundle savedInstanceState) {
if(savedInstanceState!=null){ //It could be null if starting the app.
mCustomObject = savedInstanceState.getSerializable("object_key");
}
// etc. until you have reloaded everything you stored
}
올바른 방향을 가리 키도록 위의 의사 코드를 고려하십시오. Activity Lifecycle을 읽으면 원하는 것을 달성하는 가장 좋은 방법을 결정하는 데 도움이됩니다.
답변
간단하게 ..
@Override
public void onBackPressed() {
//super.onBackPressed();
}
//super.onBackPressed (); 주석 달기 트릭을 할 것입니다
답변
이 시도:
@Override
public void onBackPressed() {
finish();
}
답변
뒤로 버튼 (휴대 전화 하단)과 홈 버튼 (작업 표시 줄 왼쪽에있는)의 동작을 처리하려는 경우 프로젝트에서 사용중인이 사용자 지정 활동이 도움이 될 수 있습니다. .
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
/**
* Activity where the home action bar button behaves like back by default
*/
public class BackActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupHomeButton();
}
private void setupHomeButton() {
final ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onMenuHomePressed();
return true;
}
return super.onOptionsItemSelected(item);
}
protected void onMenuHomePressed() {
onBackPressed();
}
}
활동에 사용 된 예 :
public class SomeActivity extends BackActivity {
// ....
@Override
public void onBackPressed()
{
// Example of logic
if ( yourConditionToOverride ) {
// ... do your logic ...
} else {
super.onBackPressed();
}
}
}
답변
@Override
public void onBackPressed() {
// Put your code here.
}
//I had to go back to the dashboard. Hence,
@Override
public void onBackPressed() {
Intent intent = new Intent(this,Dashboard.class);
startActivity(intent);
}
Just write this above or below the onCreate Method(within the class)