2012-10-13 15 views
5

मैं ActionBar बनाने के लिए ActionBarSherlock इस्तेमाल किया यह एक खोज बटन है कि पता चलता है एक AutoCompleteEditText (SHOW_AS_COLLAPSIBLE_ACTION_VIEW) जब खोज बटन क्लिक किया जाता है, EditText दिखाया गया है, मैं चाहता हूँ EditText फोकस प्राप्त है और इस तरह शीतल कीबोर्ड को दिखाने के लिए, के रूप में यह इस विस्तार किया है कोडएक्शनटेक्स्ट एक्शन बार में दिखाए जाने पर सॉफ्ट कीबोर्ड को कैसे फोकस और दिखाएं?

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getSupportMenuInflater().inflate(R.menu.activity_main, menu); 

    boolean isLight = true; 
    // Add Search button 
    int menuItemId = menu 
      .add("Search") 
      .setIcon(
        isLight ? R.drawable.ic_search_inverse 
          : R.drawable.ic_search) 
      .setActionView(R.layout.collapsible_edittext) 
      .setShowAsActionFlags(
        MenuItem.SHOW_AS_ACTION_ALWAYS 
          | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW) 
      .getItemId(); 
    // Add Search Topic (Sub Menu) 
    SubMenu subMenu1 = menu.addSubMenu("Topic"); 
    subMenu1.add(Menu.NONE, 10, 0, "All Topics"); 
    subMenu1.add(Menu.NONE, 11, 1, "Adult"); 
    subMenu1.add(Menu.NONE, 12, 2, "Pediatric"); 
    subMenu1.add(Menu.NONE, 13, 13, "Drug"); 

    MenuItem subMenu1Item = subMenu1.getItem(); 
    subMenu1Item.setIcon(R.drawable.abs__ic_menu_moreoverflow_holo_light); 
    subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

    searchBar = (AutoCompleteTextView) menu.findItem(menuItemId) 
      .getActionView().findViewById(R.id.etSearch); 

    setSearchSettings(searchMenuID); 

    // get instance of Search Button 
    searchWidgetItem = menu.findItem(menuItemId); 

    searchBar 
      .setOnEditorActionListener(new EditText.OnEditorActionListener() { 


       @Override 
       public boolean onEditorAction(TextView v, int actionId, 
         KeyEvent event) { 
        if (actionId == EditorInfo.IME_ACTION_SEARCH) { 

         // Perform a Search 
         performSearch(v.getText().toString(), 
           (searchMenuID < 0) ? 3 : searchMenuID); 

         imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
         imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 

         // Collapse the ActionView (Search Bar) 
         searchWidgetItem.collapseActionView(); 

         // Clear the TextEdit 
         v.setText(""); 

         return true; 
        } 
        return false; 
       } 
      }); 
    return true; 
} 

मैं अगर यह ध्यान केंद्रित है EditText पर एक OnFocusChangeListener शीतल Keboard सेट और दिखाने की कोशिश की है, लेकिन यह काम किया फ्लॉप:

searchBar.setOnFocusChangeListener(new OnFocusChangeListener() { 

      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (hasFocus) { 
        imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.showSoftInput(v, InputMethodManager.SHOW_FORCED); 
       } 
      } 
     }); 

यह कैसे करें?

उत्तर

5

मिले समाधान:

searchWidgetItem.setOnActionExpandListener(new OnActionExpandListener() { 

      @Override 
      public boolean onMenuItemActionExpand(MenuItem item) { 
       searchBar.post(new Runnable() { 
        @Override 
        public void run() { 
         searchBar.requestFocus(); 
         imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
         imm.showSoftInput(searchBar, 
           InputMethodManager.SHOW_IMPLICIT); 
        } 
       }); 
       return true; 
      } 

      @Override 
      public boolean onMenuItemActionCollapse(MenuItem item) { 

       return true; 
      } 
}); 
+0

क्यों एक Runnable पोस्ट करने के लिए की जरूरत है ? –

4

आप अभी भी समस्या है, तो इसलिए फोन निम्न विधि

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 
बजाय

imm.showSoftInput(searchBar, InputMethodManager.SHOW_IMPLICIT); 
+0

बहुत सी चीजों का प्रयास किया, लेकिन 'HIDE_IMPLICIT_ONLY' जोड़कर मेरे लिए अंतर बना दिया। – kaka

संबंधित मुद्दे