2015-06-02 12 views
5

में नहीं कहा जाता है, मैं एक लेआउट बनाना चाहता हूं जहां उपयोगकर्ता कलाकार के नाम में टाइप करता है और जब वह वर्चुअल कीबोर्ड पर खोज दबाता है तो कलाकारों की सूची प्रदर्शित होती है।setOnEditorActionListener को लॉलीपॉप

View rootView = (View) inflater.inflate(R.layout.fragment_search, container, false); 
EditText searchArtist = (EditText) rootView.findViewById(R.id.searchArtist); 
searchArtist.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     if (actionId == EditorInfo.IME_ACTION_SEARCH) { 
      makeToast(); 
      return true; 
     } 
     return false; 
    } 
}); 

यहाँ मेरी एक्सएमएल

<EditText 
    android:id="@+id/searchArtist" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:hint="@string/search_artist" 
    android:imeOptions="actionSearch" 
    android:inputType="text"> 
    <requestFocus /> 

मैं इस बारे में अन्य stackoverflow पोस्ट में एक बहुत खोज की है, लेकिन समाधान में से कोई भी काम करने लगते हैं है।

मिनएसडीके 21, नेक्सस 6 पर परीक्षण, संकलन एसडीकेवीरियन 22, buildToolsVersion '22 .0.1 '।

यह भी ध्यान रखें कि खोज कलाकार (edittext) एक टुकड़े के अंदर है।

अधिक संदर्भ: श्रोता कोड क्रिएटिव्यू विधि पर है।

उत्तर

1

setOnKeyListener और textChangeListener सहित सभी समाधान, की कोशिश के बाद। अंतिम समाधान परियोजना को हटा रहा था और खरोंच से शुरू कर रहा था। मुझे लगता है कि पर्यावरण के साथ एक मुद्दा था।

मुझे वास्तव में एंड्रॉइड स्टूडियो पसंद है लेकिन कभी-कभी ये बग मुझे वापस सेट करते हैं।

0

जैसा कि here सुझाया गया है, संपादक कार्रवाई पर मुख्य ईवेंट सुनने का प्रयास करें।

डॉक्स here

+0

मैं पहले से ही है कि कोशिश की। दुर्भाग्य से यह काम नहीं करता है। साथ ही, जैसे ही नरम इनपुट विधियां टेक्स्ट इनपुट करने के कई और आविष्कारशील तरीकों का उपयोग कर सकती हैं, इस बात की कोई गारंटी नहीं है कि सॉफ्ट कीबोर्ड पर कोई भी महत्वपूर्ण प्रेस एक महत्वपूर्ण घटना उत्पन्न करेगा: यह आईएमई के विवेकानुसार छोड़ा गया है, और वास्तव में ऐसी घटनाएं भेजना निराश है । मुलायम इनपुट विधि पर किसी भी कुंजी के लिए आपको कभी भी KeyEvents प्राप्त करने पर भरोसा नहीं करना चाहिए। एसआरसी -> http://developer.android।कॉम/संदर्भ/एंड्रॉइड/व्यू/KeyEvent.html – GauravPandey

2

पाया जा सकता है मैं एंड्रॉयड 5.1.1 पर एक समान कोड का परीक्षण किया। यह काम करता हैं।

public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
    Log.v("TAG", "onEditorAction(): " + actionId); 
    if (actionId == EditorInfo.IME_ACTION_SEARCH) { 
     Log.v("TAG", "onEditorAction(): entered"); 
    ... 

इस तरह, आप सुनिश्चित कर सकते हैं विधि वास्तव में बुलाया जा रहा है: मैं अगर onEditorAction बुलाया जा रहा है की जाँच करने के एक लॉग संदेश डालने के लिए सुझाव दिया। EditorInfo.IME_ACTION_SEARCH स्थिर है: 3

मुझे लगता है कि makeToast(); एक विधि है जिसे आप बनाते हैं, है ना?

बस अधिक जानकारी जोड़ने के लिए, मैंने आपके कोड को एक टुकड़े में परीक्षण किया। तो, मुझे सच में विश्वास नहीं है कि समस्या यह है कि आपका कोड डाला गया था। आपको यह सुनिश्चित करने की आवश्यकता है कि श्रोताओं को इसका उपयोग करने से पहले सेट किया गया हो। आशा यह आप

public class MainFragment extends Fragment { 
.... 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

     // view is a reference to whole fragment layout (where searchArtist is inserted) 
     View view = inflater.inflate(R.layout.fragment, null); 

     // Find searchArtist (There's only one @id/searchArtist inside View) 
     EditText searchArtist = (EditText)view.findViewById(R.id.searchArtist); 

     searchArtist.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if (actionId == EditorInfo.IME_ACTION_SEARCH) { 
       Log.v("TEMP", "I'm being clicked " + actionId); 
       return true; 
      } 
      return false; 
     } 
    }); 
    return view; 
    }// End of onCreateView 
} // End of Fragment 

मेरे एक्सएमएल मदद कर सकते हैं:

<EditText android:id="@+id/searchArtist" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"  
    android:hint="@string/search_artist"  
    android:imeOptions="actionSearch" 
    android:inputType="text" /> 
+0

हां, मेक टोस्ट() एक विधि है जिसे मैंने छद्म डिबगिंग के लिए उपयोग किया था। मैंने आपके द्वारा सुझाए गए वर्बोज़ लॉग को जोड़ने का प्रयास किया। श्रोता को नहीं बुलाया जा रहा है। क्या आपने इसे एक टुकड़े या गतिविधि के अंदर करने की कोशिश की? – GauravPandey

+0

मैंने एक गतिविधि में परीक्षण किया। लेकिन मेरे पास मेरे ऐप के टुकड़े में एक बहुत ही समान कोड है ... यह भी काम करता है। चलो और जांचें ... – W0rmH0le

+0

हां, मेरा भी। मेरे पास अन्य श्रोता विधियां हैं जो पूरी तरह से ठीक काम करती हैं, केवल यह नहीं। अधिक संदर्भ के लिए, मेरे पास यह कोड मेरे ऑनक्रेट व्यू में है। क्या यह कुछ बदलता है? – GauravPandey

0

मुझे एक ही समस्या थी: न तो ऑनएडिटरएक्शन लिस्टनर और न ही ऑनलिस्टर ने काम किया।

लेकिन टेक्स्ट चेंजलिस्टर समाधान ने चाल की। मेरे लिए।

टुकड़ा:

protected void onCreate(Bundle savedInstanceState){ 
    ... 
    someField = (EditText) this.findViewById(R.id.some_field); 
    someField.addTextChangeListener(someListener); 
    ... 
} 
संबंधित मुद्दे