我在Android应用中有一个对话框,我不希望用户能够取消。使用.setCancelable(false)
禁用后退按钮,但按下搜索按钮仍会取消对话框。我看到this question告诉我应该包括
public boolean onSearchRequested() {
return false;
}
但我仍然可以使用搜索按钮取消对话框。这是我的代码:
public class TestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
showDialog(0);
}
public boolean onSearchRequested() {
return false;
}
protected Dialog onCreateDialog(int id) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Message")
.setCancelable(false)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// nothing
}
});
return builder.create();
}
}
答案 0 :(得分:4)
@Benh您需要使用此代码为Dialog的Key Listener设置
builder.setOnKeyListener(keylistener);
在“活动类”中添加以下代码
OnKeyListener keylistener=new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SEARCH && event.getRepeatCount() == 0) {
return true; //we stop begin cancel of dialog or Progressbar
}
return false;
}
};
在你的对话框中尝试以上内容,希望这对你有用。
答案 1 :(得分:2)
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.ACTION_DOWN==KeyEvent.KEYCODE_SEARCH)
return false;
else
return super.onKeyDown(keyCode, event);
}
答案 2 :(得分:2)
我通过覆盖进度对话框来禁用搜索按钮。我在onSearchRequest()上创建了未命名的类和覆盖方法。这对我有用。 我用这个:
progressDialog = new ProgressDialog(Activity.this){
@Override
public boolean onSearchRequested() {
return true;
}
};
而不是代码:
progressDialog = new ProgressDialog(Activity.this);
答案 3 :(得分:1)
您只需要按下搜索按钮,并在按下时不执行任何操作。
public boolean onKeyDown(int keycode, KeyEvent e) {
switch(keycode) {
case KeyEvent.KEYCODE_SEARCH:
return true;
break;
}
return super.onKeyDown(keycode, e);
}
如果这对您的Activity
类不起作用,那么您可能需要创建Dialog
的子类并为对话框类实现onKeyDown
方法。