2016-06-01 84 views
1

我在我的活動中有幾個EditText。問題很簡單:如果他們都沒有焦點,我會顯示一個按鈕。如果他們中有任何人有焦點,我會隱藏按鈕。檢測是否沒有EditTexts有焦點

這裏就是我所做的:

usernameEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      usernameFocus = hasFocus; 
      adjustVisibility(); 
     } 
    }); 

    passwordEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      passwordFocus = hasFocus; 
      adjustVisibility(); 
     } 
    }); 

    private void adjustVisibility() { 
     if(usernameFocus || passwordFocus) { 
      button.setVisibility(View.GONE); 
     } else { 
      button.setVisibility(View.VISIBLE); 
     } 
    } 

問題: 當我改變焦點從一個EditText上的其他按鈕獲得焦點變化之間暫時可見。我想消除這一點。有關如何實現它的任何建議?

當用戶填充的用戶名字段之後點擊密碼字段中的問題的進一步闡述:

BUTTON INVISIBLE

  1. 用戶名字段具有焦點
  2. 用戶名字段的onFocusChange()得到稱爲
  3. 用戶名字段丟失焦點

按鈕可見

  • 密碼字段的onFocusChange()被調用
  • 密碼域獲得焦點。
  • BUTTON INVISIBLE

    顯然,點3和4之間,既不用戶名字段也不密碼字段具有焦點。在那小部分時間裏,按鈕變得可見,這正是我想要擺脫的。

    回答

    1

    把一些延遲,如果你不想從一個EditText上切換到其他

    private void adjustVisibility() { 
        if (usernameFocus || passwordFocus) { 
         mButtonVisible.setVisibility(View.GONE); 
        } else { 
         final Handler handler = new Handler(); 
         handler.postDelayed(new Runnable() { 
          @Override 
          public void run() { 
           // Do something after 5s = 5000ms 
           if (usernameFocus || passwordFocus) { 
            mButtonVisible.setVisibility(View.GONE); 
           } else { 
            mButtonVisible.setVisibility(View.VISIBLE); 
           } 
          } 
         }, 5000); 
        } 
    } 
    
    +0

    問題仍然存在,因爲焦點變化之間,這個'adjustVisibility()'方法被調用兩次。延遲它只會使按鈕瞬間閃爍,以延長眨眼時間。按鈕現在顯示約5秒鐘:| –

    +0

    @Akeshwar這是爲我工作。當你將焦點從一個變爲另一個edittext時,布爾變量的最後一個值爲true,所以你的按鈕被隱藏。現在如果你的焦點丟失了,那麼兩個都是錯誤的,所以按鈕顯示給最終用戶 –

    +0

    當我從一個EditText切換到另一個時,方法'adjustVisibility()'被連續調用兩次,對吧?在第一次調用中,這兩個值都是錯誤的。因此,按鈕顯示。但第二個電話很快就會出現,其中一個值是真實的。因此該按鈕消失。所以,在這個轉換之間,按鈕確實顯示一次。這就是我的問題所在。 –

    0

    試試這個:

    if(parentView.getCurrentFocus() instanceof EditText) 
    { 
        //Hide Buttom 
    }else{ 
        // Show Button 
    } 
    
    +0

    感謝您的答覆之間顯示。一個簡單的問題:我在哪裏放置它? –

    +0

    製作一個處理程序並在其中粘貼此代碼。 – Amy

    0

    呼籲調整焦點變化聽衆可視之前只是檢查其他編輯文本不具有焦點如下圖所示。

    usernameEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
        @Override 
        public void onFocusChange(View v, boolean hasFocus) { 
         usernameFocus = hasFocus; 
         if(!passwordEditText.hasFocus()) 
         adjustVisibility(); 
        } 
    }); 
    
    passwordEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
        @Override 
        public void onFocusChange(View v, boolean hasFocus) { 
         passwordFocus = hasFocus; 
         if(!usernameEditText.hasFocus()) 
         adjustVisibility(); 
        } 
    }); 
    

    看看這是否解決了您的問題。

    +0

    對不起,但它不能解決問題。讓我們來討論這個塊:'if(!passwordEditText.hasFocus()) adjustVisibility();'在usernameEditText的焦點更改偵聽器中。顯然,當我在兩個EditText之間切換時,'!passwordEditText.hasFocus()'將始終返回true。我已經提出了更清楚的問題,請結帳。 –