2012-03-23 57 views
3

我在Android应用程序中有一个对话框,我不希望用户能够取消。使用.setCancelable(false)将禁用后退按钮,但按下搜索按钮仍会取消对话框。我看到this question它告诉我,我应该包括在Android中禁用搜索按钮

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

似乎这个问题已经回答:http://stackoverflow.com/questions/2502443/prevent-progressdialog-from-being-dismissed - 当我点击搜索按钮,然后 – mah 2012-03-23 00:09:49

回答

4

@Benh您需要此代码为您的按键侦听器设置对话框

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

你只需要监听的搜索按钮按下,什么也不做,他们被击中时。

public boolean onKeyDown(int keycode, KeyEvent e) { 
      switch(keycode) { 
       case KeyEvent.KEYCODE_SEARCH: 
        return true; 
        break; 
      } 

      return super.onKeyDown(keycode, e); 
     } 

如果这不适合你的Activity类的工作,那么你可能需要创建Dialog一个子类,并实现对对话框类的onKeyDown方法。

+0

谢谢,但这不适合我。我用代码替换了我的代码中的'onSearchRequested'函数,只是删除了'break;'语句,因为Eclipse给了我一个无法访问的代码错误。我的对话框仍然可以通过按搜索按钮来解除。 – BenH 2012-03-23 00:17:20

+0

嗯..好吧,那么你可能需要创建一个Dialog的子类并覆盖它的'onKeyDown'方法 – slayton 2012-03-23 00:21:10

2
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(event.ACTION_DOWN==KeyEvent.KEYCODE_SEARCH) 
     return false; 
    else 
    return super.onKeyDown(keyCode, event); 
} 
2

我通过覆盖进度对话框来禁用搜索按钮。我创建了未命名的类并覆盖了onSearchRequest()方法。这对我有用。 我用这个:

progressDialog = new ProgressDialog(Activity.this){ 

       @Override 
       public boolean onSearchRequested() { 
        return true; 
       }   


      }; 

,而不是代码:

progressDialog = new ProgressDialog(Activity.this);