2012-03-23 54 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);