मैं मई गतिविधि के लेआउट-एक्सएमएल में एक EditText के लिए एक onClick श्रोता परिभाषित करना चाहते हैं के साथ विफल रहता है, लेकिन यह हमेशा एक अस्पष्ट अपवाद के साथ विफल रहता है।एंड्रॉयड EditText onClick श्रोता लेआउट में परिभाषित अस्पष्ट अपवाद
लेआउट setContentView()
onCreate
में मेरी गतिविधि के तरीके से इंजेक्शन दिया गया है। मैं नहीं हूँ यहाँ एक टुकड़ा का उपयोग कर और मुझे अच्छी तरह पता है कि XML परिभाषित onClick
श्रोता टुकड़े के लिए काम नहीं करते हैं।
परीक्षण प्रयोजनों के लिए मैं एक imageView कि EditText के बगल में स्थित है के लिए एक ही हैंडलर विधि गयी। हैंडलर काम करता है, संपादन टेक्स्ट पर यह विफल रहता है। तो यह एडिटटेक्स्ट का कुछ खास है और एक गलत जगह वाले हैंडलर विधि की सामान्य समस्या नहीं है।
<ImageView
android:layout_gravity="center_horizontal|top"
android:layout_rowSpan="3"
android:src="@drawable/ic_action_event"
android:onClick="onCreationClicked"
/>
<EditText
android:id="@+id/creation_edit"
android:focusable="false"
android:clickable="true"
android:layout_gravity="fill_horizontal"
android:hint="@string/enter_creation"
android:onClick="onCreationClicked"
style="@style/PickerEditText"
/>
जब मैं imageView जुड़े विधि निष्पादित किया जाता है और एक DialogFragment पर क्लिक करें शुरू कर दिया गया है:
यह मेरा लेआउट फ़ाइल के प्रासंगिक हिस्सा है।
java.lang.IllegalStateException: Could not find a method onCreationClicked(View) in the activity class android.support.v7.internal.widget.TintContextWrapper for onClick handler on view class android.support.v7.widget.AppCompatEditText with id 'creation_edit'
at android.view.View$1.onClick(View.java:3994)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.NoSuchMethodException: onCreationClicked [class android.view.View]
at java.lang.Class.getMethod(Class.java:664)
at java.lang.Class.getMethod(Class.java:643)
at android.view.View$1.onClick(View.java:3987)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
मैं वर्तमान में संस्करण v7 22.1.0
जोड़ना एक सैमसंग एस 4 (एंड्रॉयड 5.0.1) एपीआई 21 और AppCompat लाइब्रेरी पर परीक्षण कर रहा हूँ: जब मैं EditText मैं निम्नलिखित अपवाद मिल पर क्लिक करें onClick
श्रोता onCreate
विधि में प्रोग्राम के रूप में एक समाधान हो सकता है, लेकिन जब से यह एक बड़ा स्विच बयान और अधिक पठनीय और स्पष्ट कोड में XML- आधारित onClick-हैंडलर परिणाम के साथ एक एकल onClick
विधि में जो परिणाम मैं, इस से बचना चाहते थे जो मैं पसंद करते हैं।
अब मैं त्रुटि व्यवहार और सही व्यवहार (नीचे देखें) पुन: पेश कर सकते हैं:
अतिरिक्त शोध किया। ऐसा लगता है कि यह एक बग (या एक फीचर) है जो एपकोम्पैट-वी 7 22.1.0 & 22.1.1 के साथ पेश किया गया है।
मैं खाली गतिविधि के साथ एंड्रॉयड स्टूडियो के साथ एक नया ताजा प्रोजेक्ट बनाया। minSdk 17, targetSdk 21. जोड़ा खाली Activity
को EditText
जैसा कि नीचे दिखाया और Activity
इस तरह के हैंडलर विधि कहा:
public void onCreationClicked(View view) {
Toast.makeText(this,"Event Handled",Toast.LENGTH_LONG).show();
}
अनुप्रयोग प्रारंभ EditText छुआ -> क्रैश
बदली गई मेरी से build.gradle:
compile 'com.android.support:appcompat-v7:22.1.1'
को
compile 'com.android.support:appcompat-v7:22.0.0'
और Toast
दिखाया गया है।
कोई विचार?
प्रबंधन नहीं करती है मैं EditText पर onClick श्रोता की आवश्यकता है। इसे हटाने का समाधान नहीं है। – Wildsau