我知道这个问题在这里被问过很多次,但我没有找到我的问题的正确答案。
此代码可以禁用后退按钮:
@Override
public void onBackPressed() {
// Do Here what ever you want do on back press;
}
但无论如何我可以暂时禁用后退按钮,而不是整个活动?
我知道这个问题在这里被问过很多次,但我没有找到我的问题的正确答案。
此代码可以禁用后退按钮:
@Override
public void onBackPressed() {
// Do Here what ever you want do on back press;
}
但无论如何我可以暂时禁用后退按钮,而不是整个活动?
这是禁用后退按钮的完美解决方案
@Override
public void onBackPressed() {
if(condition to check){
// this block disable back button
}else{
// this block enable back button
super.onBackPressed();
}
}
Dixit 的回答很好。只是另一种选择
public boolean onKeyDown(int keyCode, KeyEvent event) {
boolean result = false;
if (keyCode == KEYCODE_BACK) {
if (condition) {
result = true;
}
}
return result;
}
注意..
它也适用于古代版本
从 onKeyDown 返回 true 会消耗默认行为
您必须设置boolean flag
必须禁用后退按钮设置的位置flag value true
;
在onBackPressed()中,您必须按照@Dixit所说的设置条件
@Override
public void onBackPressed() {
if(condition to check){
// this block disable back button
}else{
// this block enable back button
super.onBackPressed();
}
}
如果您想在一段时间内禁用后退按钮,请使用此功能,
//for 5 sec = 5000
countDownTimer = new CountDownTimer(5000,1000) {
@Override
public void onTick(long millisUntilFinished) {
txtWait.setTextColor(getResources().getColor(R.color.errorcolor));
txtWait.setText("Wait( " + millisUntilFinished / 1000+" sec)");
onBackPressed();
}
@Override
public void onFinish() {
YourActivityName.super.onBackPressed();
}
}.start();
在覆盖方法中:
@Override
public void onBackPressed() {
//super.onBackPressed(); commented this to disable the back press
}
YourActivity extends AppCompatActivity{
boolean isBackButtonDisabled = false;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState)
setContentView(R.layout.somelayout);
disableBackButton(4000); //<--Back button is disabled
}
@Override
public void onBackPressed(){
if(!sBackButtonDisabled){
super.onBackPressed();
}
}
private void disableBackButton(final int timeInMilis){
if(!isBackButtonDisabled) {
isBackButtonDisabled = true; //<-- Keep it outside Thread code
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(timeInMilis);
} catch (InterruptedException e) {
} finally {
isBackButtonDisabled = false;
}
}
});
t.start();
}
}
}
注意:您也可以
disableBackButton(time)
在其他场景中使用。例如按钮点击。如果您多次单击按钮,线程将只运行一次。因为在此代码中,isBackButtonDisable
变量“在某种程度上”是线程安全的。