在退出任何活动后按下退出应用程序



我在操作栏中放置了后退按钮,用于在活动之间导航并且我想设置在手机背面按下任何活动用户退出应用程序。

我可以在每个活动中明确定义这一点,但我希望在一个地方编写它,以避免在每一个活动中编写相同的代码。有什么办法吗?

您应该使用关于后退按钮的逻辑创建BaseActivity extends Activity,并且在需要相同行为的地方只需创建extends BaseActivity

您还可以在清单中为所有活动添加一个标记,如

<activity
android:name="com.example.shoppingapp.AddNewItems"
android:label="" 
android:noHistory="true">

通过向用户发出警告退出应用程序的任何活动,

我已经实现了BaseActivity类如下:

public class BaseActivity extends AppCompatActivity {
public static String ACTIVITY_FINISH_ACTION = "my.activities.finish.action";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
registerBroadCastReceiver();
}
private BroadcastReceiver mFinishReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() != null && intent.getAction().equals(ACTIVITY_FINISH_ACTION)) {
new AlertDialog.Builder(BaseActivity.this)
.setTitle("Warning")
.setMessage("Do you really want to exit?")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.finishAffinity(BaseActivity.this);
finish();
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();

}
}
};
private void registerBroadCastReceiver() {
registerReceiver(mFinishReceiver, new IntentFilter(ACTIVITY_FINISH_ACTION));
}
private void unRegisterBroadCastReceiver() {
unregisterReceiver(mFinishReceiver);
}
@Override
protected void onDestroy() {
super.onDestroy();
unRegisterBroadCastReceiver();
}
}

将这个BaseActivity类扩展到每个类,并覆盖onBackPressed((方法,如下所示:

@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.setAction(BaseActivity.ACTIVITY_FINISH_ACTION);
sendBroadcast(intent);
}

在BaseActivity中添加以下代码。对于将扩展BaseActivity的每个活动,它都将按预期工作。

@Override
public void onBackPressed() {
finishAffinity();
finish();
}

首先创建BaseActivity,如下所示:

public class BaseActivity extends AppCompatActivity {
public static String ACTIVITY_FINISH_ACTION = "my.activities.finish.action";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
registerBroadCastReceiver();
}
private BroadcastReceiver mFinishReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction() != null && intent.getAction().equals(ACTIVITY_FINISH_ACTION)) {
finish();
}
}
};
private void registerBroadCastReceiver() {
registerReceiver(mFinishReceiver, new IntentFilter(ACTIVITY_FINISH_ACTION));
}
private void unRegisterBroadCastReceiver() {
unregisterReceiver(mFinishReceiver);
}

@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.setAction(BaseActivity.ACTIVITY_FINISH_ACTION);
sendBroadcast(intent);
}
@Override
protected void onDestroy() {
super.onDestroy();
unRegisterBroadCastReceiver();
}

}

然后用BaseActivity扩展您的每个活动,并按下后退按钮,发送如下广播:

Intent intent = new Intent();
intent.setAction(BaseActivity.ACTIVITY_FINISH_ACTION);
sendBroadcast(intent);

相关内容

最新更新