2012-04-07 66 views
0

我有一個AutoCompleteTextView作爲Collabsible ActionItem,並且我希望鍵盤在它被展開和聚焦時顯示。這是我在onCreateOptionsMenu(代碼):Android:AutoCompleteTextView作爲Collabsible ActionItem鍵盤未在焦點上顯示

menu.add("Search") 
      .setIcon(R.drawable.ic_search) 
      .setActionView(R.layout.collapsible_edittext) 
      .setShowAsAction(
        MenuItem.SHOW_AS_ACTION_ALWAYS 
          | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 


    final MenuItem searchMenuItem = menu.getItem(0); 
    searchMenuItem.setOnActionExpandListener(new OnActionExpandListener() { 

     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView) item 
        .getActionView(); 
      autoCompleteTextView 
        .setOnFocusChangeListener(new OnFocusChangeListener() { 

         @Override 
         public void onFocusChange(View v, boolean hasFocus) { 
          Log.d(TAG, "onFocusChange: " + hasFocus); 
          if (hasFocus) { 
           mInputManager.showSoftInput(v, 
             InputMethodManager.SHOW_FORCED); 
          } else { 
           mInputManager.hideSoftInputFromWindow(
             v.getWindowToken(), 0); 
          } 

         } 
        }); 
      autoCompleteTextView.requestFocus(); 
      return true; 
     } 

     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView) item 
        .getActionView(); 

      autoCompleteTextView.clearFocus(); 
      autoCompleteTextView.setText(""); 
      return true; 
     } 
    }); 

當我在ActionItem單擊第一次,沒有keybord所示。在摺疊後,然後單擊該項目上的鍵盤顯示。但是我希望在用戶第一次點擊操作項時顯示鍵盤。 我正在使用ActionBarSherlock,如果重要的話。 那麼爲什麼鍵盤在第一次擴展時沒有顯示?有任何想法嗎?

回答

1

您是否嘗試過手動將焦點設置爲編輯文本並在onOptionsItemSelected方法中手動顯示鍵盤?

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case MENU_SEARCH: 
     // select edittext here 
     // show keyboard here 
     return true; 

    } 
    return super.onOptionsItemSelected(item); 
} 

編輯:我發現這個代碼從這裏顯示鍵盤:

https://code.google.com/p/android-batavierenrace/source/browse/trunk/BataApp/src/com/ut/bataapp/activities/TeamsActivity.java

我測試我的應用程序和它的作品...

public static void setKeyboardFocus(final EditText primaryTextField) { 
       (new Handler()).postDelayed(new Runnable() { 
         public void run() { 
           primaryTextField.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 0, 0, 0)); 
           primaryTextField.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0)); 
         } 
       }, 100); 
     } 
+0

它的工作。 。 謝謝 – 2012-04-18 17:11:05