2012-07-01 19 views
11

समस्या को हल करने के लिए बहुत समय व्यतीत किया गया था, और यह आसान लग रहा है, लेकिन मैं वास्तव में थक गया हूं और समाधान नहीं ढूंढ सका। मेरे पास एक गतिविधि है, गतिविधि में 4 एडिटटेक्स्ट घटक हैं, उनमें से 2 में पॉपअप मेनू (अलर्टडिअलॉग) है जिसमें सूची है, अगला - संपादन के लिए अक्षम है, और आखिरी वाला - संपादन योग्य है, और जब सॉफ्ट उपयोगकर्ता दिखाना चाहिए, तो सॉफ्ट कीबोर्ड दिखाना चाहिए इस पर टैप कर रहा है।अनुरोध फ़ोकस संपादन टेक्स्ट के लिए ठीक से काम नहीं करता

इसके अलावा, मेरी रूट लीनियरलाउट में लीनियरलाउट है जिसमें रिलेवेटिवआउट के अंदर है। आखिरी व्यक्ति को एडबैनर की आवश्यकता है। अंतिम LinearLayout (RelativeLayout) रूट लेआउट के नीचे गठबंधन किया गया है।

एक्सएमएल का हिस्सा है कि यह वर्णन करता है:

<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_gravity="bottom" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:gravity="bottom"> 
    <RelativeLayout 
     android:id="@+id/AdvLayoutReserveArea" 
     android:layout_width="fill_parent" 
     android:layout_height="50dp" 
     android:background="#FFFFFF" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:gravity="bottom" /> 
    </LinearLayout> 

जब गतिविधि शुरू कर रहा है, संपादन योग्य EditText साथ ग्रीन सीमा और कर्सर निमिष है ध्यान केंद्रित किया है। कुछ सेकंड शेष होने के बाद, एडबैनर लोड और दिखाया गया है। जब ऐसा होता है, संपादन योग्य संपादन टेक्स्ट फोकस खो गया .. इस पल से, मेरा जीवन एक दुःस्वप्न की तरह हो।

चलो चरण-दर-चरण देखें।

समस्या 1. में अपनी लय (जब अभिभाषक भरी हुई और दिखाई देता है) उपयोगकर्ता नरम कुंजीपटल के माध्यम से एक EditText क्षेत्र संपादित कर रहा है, तो फोकस खो दिया है, सीमा एक धूसर रंग ले, और उपयोगकर्ता जारी है एक पाठ टाइप करने के लिए कोई परिणाम नहीं है - प्रतीक मुद्रित नहीं होते हैं (EditText में CURSOR बहुत खो गया है)।

मुझे लगता है कि कोई भी उपयोगकर्ता परेशान होगा - जब आप टेक्स्ट टाइप करते हैं, और कर्सर निष्क्रिय होता है, क्योंकि पृष्ठभूमि में कुछ सलाह लोड होती है और यह स्वयं के लिए ध्यान केंद्रित करती है।

इसे हल करने के लिए, विधि में जब एड लोड होता है (दिखाया गया है) मैं अनुरोध फ़ोकस विधि द्वारा संपादन टेक्स्ट पर मैन्युअल रूप से फ़ोकस करने का प्रयास करता हूं। वास्तव में मैं:

public void onAdLoaded() 
    { 
// TODO Auto-generated method stub 
// add app specific code for this event here... 
// called when an ad is successfully displayed on device    
    CountEdit1.requestFocus(); 
} 

हाँ, कर्सर EditText क्षेत्र में लौट आता है, और अगर नरम कुंजीपटल सक्रिय है, उपयोगकर्ता अभी भी पाठ लिखने सकते हैं, लेकिन EditText क्षेत्र की सीमा धूसर रहने ...

नोट 'ध्यान केंद्रित संपादन टेक्स्ट के ग्रीन और ग्रे सीमा के बीच अंतर के बारे में निश्चित नहीं है .. ग्रीन आमतौर पर जब उपयोगकर्ता उस पर टैप कर रहा है, और ग्रे, शायद, जब हम मैन्युअल रूप से फोकस का अनुरोध करना चाहते हैं (requestFocus() आदि का उपयोग कर

समस्या 2. (उत्थान समस्या के परिणामस्वरूप एम # 1)। मुलायम कीबोर्ड बंद होने के बाद, यदि उपयोगकर्ता संपादन योग्य संपादन टेक्स्ट पर टैप करता है, तो यह ध्यान केंद्रित करता है और कर्सर अंदर दिखाई देता है, लेकिन फिर से सॉफ्ट कीबोर्ड दिखाने के लिए कोई प्रतिक्रिया नहीं होती है! इसका टैपिंग सॉफ्ट कीबोर्ड नहीं दिखाता है, लेकिन कॉपी मोड में संपादन फ़ील्ड की तरह दिखता है - जब उपयोगकर्ता टेक्स्ट का चयन कर सकता है और इसे क्लिपबोर्ड पर कॉपी/कॉपी कर सकता है।

मेरा लक्ष्य पहली बार देखने के लिए आसान है। मैं सिर्फ कर्सर को सहेजना चाहता हूं और संपादन योग्य संपादन फ़ील्ड (countEdit1) पर ध्यान केंद्रित करना चाहता हूं जबकि सॉफ्ट कीबोर्ड दिखाया गया है और उपयोगकर्ता कुछ टेक्स्ट टाइप कर रहा है। और सामान्य प्रतिक्रिया जब उपयोगकर्ता संपादन टेक्स्ट को टैप करता है - आमतौर पर, बस मुझे सॉफ्ट कीबोर्ड दिखाएं!

मैंने यहां सभी मुद्दों को पढ़ा है, मैंने अलग-अलग तरीकों को जोड़ दिया है (स्पष्ट फोकस, अनुरोध फोकसफ्रॉम टच इत्यादि), बस इसे हल करने के लिए किए गए सभी कार्यों का वर्णन करने के लिए पर्याप्त समय और स्थान नहीं है।मुख्य समस्याएं ऊपर वर्णित हैं। और समस्या ... अग्रिम धन्यवाद को सुलझाने के लिए

आशा ..

उत्तर

13

लक्ष्य हल हो गया है, कामकाज मैंने सोचा जितना आसान है। ऑनक्लिक() विधि का उपयोग करके समस्या # 2 तय की गई है। सॉफ्टफोकस() और requestFocus() विधियों दोनों का उपयोग करने वाले सॉफ्ट कीबोर्ड की उपस्थिति के लिए पर्याप्त स्थिति।

CountEdit1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) 
     { 
       CountEdit1.clearFocus(); 
     CountEdit1.requestFocus(); 
     } 
    }); 

नरम कुंजीपटल प्रकट होता है जब उपयोगकर्ता EditText फ़ील्ड पर टैप कर रहा है। फिक्स्ड।

4
userInput.post(new Runnable() { 
      public void run() { 
       userIdInput.requestFocus(); 

      } 
     }); 

इस पर एक जाना है और बताते हैं कि आपकी समस्या अभी भी हल नहीं है।

+0

धन्यवाद, लेकिन इस कोड नहीं समस्या का समाधान। मैंने पहले भी उसी कोड के साथ खेला था। मैंने इसे अपनी गतिविधि कक्षा में रखा है, लेकिन अभी भी कोई प्रगति नहीं है। इसके अलावा मुख्य विवरण के लिए मेरे पास आधा हल करने के 2 तरीके हैं: 1) यदि मैं countEdit1.requestFocus() को हटा देता हूं; एडलोडेड() पर सार्वजनिक शून्य से, तो सॉफ्ट कीबोर्ड तब दिखाई देता है जब उपयोगकर्ता एड लोड होने के बाद भी संपादन टेक्स्ट पर टैप करता है, लेकिन .. अगर सॉफ्टकीबोर्ड दिखाए जाने पर एड लोड हो गया है, तो उपयोगकर्ता ने संपादन टेक्स्ट में कर्सर खो दिया है और पाठ इनपुट जारी रखने में असमर्थ है। – Dimon

+0

2) countEdit1.requestFocus() के साथ; ऑनएडलोडेड() में, उपयोगकर्ता एड लोड होने के बाद संपादन फ़ील्ड जारी रखने में सक्षम है, लेकिन सॉफ्टकीबोर्ड बंद होने के बाद, एडिटटेक्स्ट द्वारा अगला टैपिंग फिर से सॉफ्ट कीबोर्ड नहीं दिखाता है! यह स्थिति मुझे बहुत थक गई है .. – Dimon

+0

क्या आप सॉफ्ट कीबोर्ड को मैन्युअल रूप से प्रदर्शित नहीं कर रहे हैं यदि यह अपने आप नहीं आ रहा है ..? – Swayam

7
मेरे लिए

काम करता है:

InputMethodManager mgr = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
editField.requestFocus(); 
mgr.showSoftInput(editField, InputMethodManager.SHOW_IMPLICIT); 
0

के बाद दृश्य टुकड़ा या गतिविधि में बनाई गई है आप ध्यान केंद्रित करने का अनुरोध करना चाहिए:

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    CountEdit1.requestFocus(); 
} 
0

कोशिश यह:

public void onAdLoaded() 
    { 
    final Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        CountEdit1.requestFocus(); 
        InputMethodManager mgr = (InputMethodManager) base.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
        mgr.showSoftInput(CountEdit1, InputMethodManager.SHOW_IMPLICIT); 
        CountEdit1.setSelection(CountEdit1.getText().length()); 
       } 
      },0); 
}