2013-11-29 42 views
0

在我的android應用程序中,我有一個警告對話框,我想覆蓋返回按下的事件,並最終使警報解除。如何定義android alert alert builder的back事件?

但是有一個問題,當我點擊返回時,由於某種原因,返回事件發生兩次。我試圖通過把一個全局變量「加載」來解決這個問題,並且在我第一次做這件事時將它設置爲true。但這似乎不是一個好方法。有誰知道這裏有什麼錯嗎?

我實現這樣的:

 String[] items = new String[names.size()]; 
     items = names.toArray(items); 

     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle(""); 

     builder.setItems(items, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       File pickedFile = files.get(which); 
       try { 
        Scanner scanner = new Scanner(pickedFile); 
        String gradesheetData = ""; 
        while (scanner.hasNext()) { 
         gradesheetData += scanner.useDelimiter("\\Z").next(); 
        } 
        scanner.close(); 

        gs = GsonParser.getGson().fromJson(gradesheetData, GradeSheet.class); 
        ShowData(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
        return; 
       } 
      } 
     }); 
     builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface arg0, int arg1) { 
       ShowData(); 
      } 
     }); 

     builder.setOnKeyListener(new OnKeyListener() { 
      @Override 
      public boolean onKey(DialogInterface arg0, int keyCode, KeyEvent event) { 
       if (keyCode == KeyEvent.KEYCODE_BACK) { 
        if (!loaded) { 
         loaded = true; 
         ShowData(); 
        } 
       } 
       return false; 
      } 
     }); 

     builder.create(); 
     builder.show(); 
+0

你能請張貼fullcode .. –

回答

0

取而代之的首要onKeyDown()方法,您可以使用覆蓋DialogonDismiss()方法來實現你想要什麼。但是,如果您必須使用上述代碼本身,我可能會建議您在onKeyDown()方法的if區塊中添加此語句return true;。這可能讓你的工作做得太

0

這裏需要返回true ..這是造成問題...

builder.setOnKeyListener(new OnKeyListener() { 
     @Override 
     public boolean onKey(DialogInterface arg0, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_BACK) { 

       ShowData(); 

      } 
      return true; 
     } 
    }); 
+0

我固定它,我只是用setOnCancelListener。 – omega