2012-07-17 11 views
5

EDIT: हल करने के बाद भी एंड्रॉइड कीबोर्ड अभी भी दिखाई देता है। उत्तरईमेल उद्देश्य

मैं अंतर्निहित Intent.ACTION_SEND "chooser" लॉन्च कर रहा हूं ताकि उपयोगकर्ता मेरे एप्लिकेशन से संदेश कैसे भेज सकता है। यह ठीक काम करता है, लेकिन अगर मैंने लॉन्च किए गए ईमेल प्रोग्राम में 'डिस्कार्ड' मारा है, तो यह मेरे एप्लिकेशन पर ऑन-स्क्रीन कीबोर्ड के साथ अभी भी दिखाई देता है। मैंने imm.hideSoftInputFromWindow (...) के विभिन्न incantations के साथ इसे बंद करने की कोशिश की है, लेकिन कोई फायदा नहीं हुआ। इसे ठीक करने का कोई तरीका?

इस प्रकार मैं 'chooser' लॉन्च कर रहा हूं और कीबोर्ड सक्रियता() पर कीबोर्ड बंद करने का प्रयास कर रहा हूं। ध्यान दें कि tabHost मेरे मुख्य एप्लिकेशन (MainApp) में एक स्थिर सदस्य है जिसमें tabSpecs बनाने के लिए उपयोग की जाने वाली टैबहोस्ट ऑब्जेक्ट होता है। मेल // एड के इरादे कॉल करने से पहले इस कोड

public class L_Secondary extends ListActivity implements myConst 
{ 
    @Override 
    protected void onCreate (Bundle savedInstanceState) 
    { 
    super.onCreate (savedInstanceState); 
    setContentView(R.layout.l_people_secondary); 

    // instantiate the custom array adapter class and pass it some info to build a ListView with. 
    ListView lv = getListView(); 
    lv.setOnItemClickListener (oicl); 
    A_secondary da = new A_secondary (this, android.R.layout.simple_list_item_single_choice, mPiecesArray, mPartsArray); 

    setListAdapter (da); 
    } 

    ... 


    // after launching the email client, the keyboard stays visible 
    // over the Listview. Currently the keyboard gets forced to close 
    // in getView() of the ArrayAdapter class da, in onCreate() above     
    public void launchEmail() 
    { 
    try 
    { 
    // use the builtin chooser for users mail app 
    Intent sendIntent = new Intent(Intent.ACTION_SEND, Uri.fromParts ("mailto", "[email protected]", null)); 
    sendIntent.setType("text/plain");  

    sendIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "msg_subject"); 
    sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, "msg_body"); 

    startActivityForResult (Intent.createChooser(sendIntent, "Send via which Application?"), 0); 
    } 
    catch (Exception e) 
    { 
    Toast.makeText (this, "No activity was found to handle this action",Toast.LENGTH_SHORT).show(); 
    } 
    } 

... 

} 

उत्तर

0

मैं प्रसंग मेरी ArrayAdapter कक्षा में getView() के लिए पारित किया जो L_Secondary कक्षा में instantiated है का उपयोग कर समाप्त हो गया कह सकते हैं। ऐसा करने के लिए यह सबसे अच्छी जगह नहीं है क्योंकि जब भी सूची स्क्रॉल हो जाती है, या स्पर्श किया जाता है, या इसे स्थानांतरित करने के लिए यह कुंजीपटल दिखाई दे रहा है और इसे बंद कर देता है। फिर भी, यह एक शुरुआत है। यहां से मैं इसे रखने के लिए एक और अधिक कुशल जगह कोशिश कर सकता हूं।

@Override 
public View getView (int position, View convertView, ViewGroup parent) 
{ 
    View row = convertView; 
    Context ctx = parent.getContext(); 

    if (row == null) 
    { 
     LayoutInflater inflater = ((Activity) ctx).getLayoutInflater(); 
     row = inflater.inflate (R.layout.li_secondary, parent, false); 
    } 

    // hide the keyboard when coming back from Email client Intent 
    InputMethodManager imm = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE); 
    if (imm.isActive() == true) 
     imm.hideSoftInputFromWindow (MainApp.tabHost.getCurrentTabView().getApplicationWindowToken(),imm.HIDE_NOT_ALWAYS); 
    ... 
} 
+0

यह क्यों काम कर रहा है?मुझे अपनी स्थिति में इसका इस्तेमाल करने की कोशिश करने के लिए समझने की जरूरत है। – Poutrathor

0

उपयोग कीबोर्ड छिपाएं

imm.hideSoftInputFromWindow(ed.getWindowToken(), 0); 

शो कुंजीपटल

imm.showSoftInput(ed, 0); 

कोशिश के लिए के लिए EditText

InputMethodManager imm = (InputMethodManager)this.getSystemService(Service.INPUT_METHOD_SERVICE); 

है इस onRestart() विधि पर कोड के साथ-साथ

या

आप के रूप में अच्छी

<activity android:name=".YourActivity" 
      android:windowSoftInputMode="stateHidden"></activity> 

धन्यवाद इस कोशिश कर सकते हैं।

+0

मैं इस कोशिश करेगा लेकिन मैं अपने ListView में एक EditText जरूरत नहीं है। मैं आपको धन्यवाद प्रयोग करूंगा। – wufoo

+0

यदि आपके पास अपनी सूची एक्टिविटी में कोई संपादन टेक्स्ट नहीं है तो मैंने एक और समाधान के लिए अपना कोड संपादित किया है। धन्यवाद – SALMAN

+0

धन्यवाद। मेरे पास राज्य हैड सेट है लेकिन अभी भी कोई भाग्य नहीं है। – wufoo

0

मेरा मानना ​​है कि आप onResume में hideSoftInputFromWindow विधि()

protected void onResume() 
{ 
    InputMethodManager keyboard = (InputMethodManager) 
    getSystemService(Context.INPUT_METHOD_SERVICE); 
    keyboard.hideSoftInputFromWindow(userInput.getWindowToken(), 0); 
} 
+0

यह क्यों कम हो गया है? – Leon

+0

यकीन नहीं है लेकिन अगर मैं कुछ गलत कर रहा हूं तो कृपया मुझे बताएं –

+0

उपयोगकर्ता इनपुट क्या है? –

2

मैंने पाया यह मेरा onResume() में जोड़कर मेरे लिए काम किया

protected void onResume() 
{ 
    Handler h = new Handler(); 
    h.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
     keyboard.hideSoftInputFromWindow(findViewById(android.R.id.content).getWindowToken(), 0); 
    } 
    }, 500); 
} 
+0

केवल एक चीज जो काम करती है ... – peresisUser

+0

आप इसे रेस्यूम() के बजाय एक्टिविटी रिसैट() में भी लिख सकते हैं। –