2012-03-20 15 views
15

पर क्लिक करें (देखें) पर कोई विधि नहीं मिल सका, फुलाए गए लेआउट में बटन क्लिक रनटाइम पर विफल रहता है क्योंकि विधि नहीं मिल सकती है। ई/एंड्रॉइड रनटाइम (9 21): java.lang.IllegalStateException: गतिविधि में क्लिक (क्लिक) पर एक विधि नहीं मिल सका, लेकिन यदि मुख्य लेआउट से बटन पर क्लिक करें, तो अच्छा काम करें। मैंने क्या गलत किया है?गतिविधि

अद्यतन: परिवर्तन कोड ... stil असफल ... त्रुटि लॉग जोड़ने मैं अपने बटन के सभी ome विधि में प्रोसेस किया गया करना चाहते हैं।

मुख्य गतिविधि वर्ग

package com.android.insertview; 


import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Toast; 

public class InsertViewActivity extends Activity { 
    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     /*LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     ViewGroup parent = (ViewGroup)findViewById(R.id.main_view); 
     inflater.inflate(R.layout.volume_control, parent);*/ 

     LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
     View v = vi.inflate(R.layout.volume_control, null);  
     View insertPoint = findViewById(R.id.main_view); 
     ((ViewGroup) insertPoint).addView(v, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT 
                      , ViewGroup.LayoutParams.WRAP_CONTENT)); 
    } 


    public void btnclick(View v) { 
     // TODO Auto-generated method stub 
     Context context = getApplicationContext(); 
     Toast toast = Toast.makeText(context, 
      "This is Toast Notification", Toast.LENGTH_SHORT); 
     toast.setGravity(Gravity.CENTER, 0, 0); 
     toast.show();  
    } 
} 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" android:id="@+id/main_view"> 
</LinearLayout> 

बढ़ा-चढ़ाकर लेआउट

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" android:background="@drawable/service_button_container_background" 
    android:id="@+id/volume_view"> 

    <Button 
     android:id="@+id/volume_up" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/button_volume_up" 
     android:onClick="btnclick" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/button_volume_mute_off" 
     android:onClick="btnclick"/> 

    <Button 
     android:id="@+id/volume_down" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/button_volume_down" 
     android:onClick="btnclick"/> 

</LinearLayout> 

त्रुटि लॉग

03-19 15:31:45.184: W/dalvikvm(1071): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
03-19 15:31:45.184: E/AndroidRuntime(1071): Uncaught handler: thread main exiting due to uncaught exception 
03-19 15:31:45.194: E/AndroidRuntime(1071): java.lang.IllegalStateException: Could not find a method genclick(View) in the activity 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.view.View$1.onClick(View.java:2020) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.view.View.performClick(View.java:2364) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.view.View.onTouchEvent(View.java:4179) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.widget.TextView.onTouchEvent(TextView.java:6541) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.view.View.dispatchTouchEvent(View.java:3709) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.os.Looper.loop(Looper.java:123) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at java.lang.reflect.Method.invoke(Method.java:521) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at dalvik.system.NativeStart.main(Native Method) 
03-19 15:31:45.194: E/AndroidRuntime(1071): Caused by: java.lang.NoSuchMethodException: genclick 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at java.lang.ClassCache.findMethodByName(ClassCache.java:308) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at java.lang.Class.getMethod(Class.java:1014) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  at android.view.View$1.onClick(View.java:2017) 
03-19 15:31:45.194: E/AndroidRuntime(1071):  ... 22 more 

अद्यतन 2:

ठीक है, अगर मैं ऐसा करते हैं, मैं सभी बटन एक विधि genericClick() में क्लिक

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/front_end" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <!-- Main --> 
    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/main_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:background="@drawable/service_button_container_background" > 

     <ImageButton 
      android:id="@+id/radio" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/button_radio" 
      android:clickable="true" 
      android:onClick="genericClick" /> 

     <ImageButton 
      android:id="@+id/player" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/button_player" 
      android:onClick="genericClick" /> 

     <ImageButton 
      android:id="@+id/navi" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/button_navigation" 
      android:onClick="genericClick" /> 
    </LinearLayout> 

    <!-- Volume controls --> 
    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/volume_controls" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:background="@drawable/service_button_container_background" 
     android:orientation="vertical" > 

     <ImageButton 
      android:id="@+id/volume_up" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/button_volume_up" 
      android:onClick="genericClick" /> 

     <ImageButton 
      android:id="@+id/volume_mute" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/button_volume_mute_off" 
      android:onClick="genericClick" /> 

     <ImageButton 
      android:id="@+id/volume_down" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/button_volume_down" 
      android:onClick="genericClick" /> 
    </LinearLayout> 

    <!-- Radio controls --> 
    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/radio_controls" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignRight="@+id/main_view" 
     android:layout_marginRight="100dp" 
     android:background="@drawable/service_button_container_background" 
     android:visibility="invisible" > 

     <ImageButton 
      android:id="@+id/radio_preset" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:onClick="genericClick" android:background="@drawable/button_menu"/> 

     <ImageButton 
      android:id="@+id/button2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/button_rewind" 
      android:onClick="genericClick" /> 

     <ImageButton 
      android:id="@+id/button3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/button_play" 
      android:onClick="genericClick" /> 

     <ImageButton 
      android:id="@+id/button4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/button_forward" 
      android:onClick="genericClick" /> 
    </LinearLayout> 

    <!-- Radio Info --> 
    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/radio_info" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/radio_controls" 
     android:layout_alignLeft="@+id/main_view" 
     android:layout_marginLeft="100dp" 
     android:background="@drawable/service_button_container_background" 
     android:orientation="vertical" 
     android:visibility="invisible"> 

     <LinearLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" > 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="FM" 
       android:textSize="18.0px" /> 

      <TextView 
       android:id="@+id/preset" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="1" 
       android:textColor="#ffd6d6d6" 
       android:textSize="18.0px" /> 

      <TextView 
       android:layout_width="10.0dip" 
       android:layout_height="wrap_content" 
       android:text=" " 
       android:textSize="18.0px" /> 

      <TextView 
       android:id="@+id/frequency" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="108.0" 
       android:textColor="#ffd6d6d6" 
       android:textSize="18.0px" /> 
     </LinearLayout> 

     <LinearLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" > 

      <TextView 
       android:id="@+id/title" 
       android:layout_width="195.0dip" 
       android:layout_height="24.0dip" 
       android:text="Русское радио" 
       android:textColor="#ffd6d6d6" 
       android:textSize="18.0px" /> 
     </LinearLayout> 
    </LinearLayout> 
</RelativeLayout> 
+2

ऑनक्लिक लिस्टनर को लागू करने और ऑनक्लिक विधि को ओवरराइड करने की आवश्यकता नहीं है: आप अपना स्वयं का परिभाषित कर सकते हैं। यदि आप कार्यान्वयन और @ ओवरराइड टैग को हटाते हैं, और अपना प्रोग्राम फिर से चलाते हैं, तो क्या यह अभी भी असफल हो जाता है? – Guillaume

+0

इसके अलावा आपको अपनी विधि को वास्तव में क्या करना चाहिए, एक सामान्य "ऑनक्लिक" – Guillaume

+0

@ गुइल्यूम, हम्म। आप सही हैं। मैं इसे देखकर भी उलझन में हूं .... – Prem

उत्तर

11

@Override एनोटेशन निकालें संभाला जा सकता है। एंड्रॉइड के लिए आधिकारिक documentation देखें: ऑनक्लिक - उनके मामले में "स्वयं डिज़ाइन (देखें)" हैंडलर विधि।

अद्यतन: जैसा कि अन्य लोगों ने सुझाव दिया है, आपको अपने ईवेंट-हैंडलर विधि के लिए ऐसे सामान्य नामकरण का उपयोग नहीं करना चाहिए - "ऑनक्लिक" बहुत सामान्य है। अगर आपके पास 10 बटन हैं तो क्या होगा? "onClickLoginButton", "onClickSaveBtn" आदि जैसे कुछ कोशिश करें मुझे लगता है कि आप अपने ऑन-हैंडलर विधि के लिए "ऑनक्लिक" नाम का उपयोग नहीं कर सकते हैं, क्योंकि View.OnClickListener में "ऑनक्लिक" विधि है, इसलिए आपको नाम बदलने की आवश्यकता है।

<Button 
    android:id="@+id/volume_up" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/button_volume_up" 
    android:onClick="handleVolumeUp" /> 

और अपनी गतिविधि वर्ग

public void handleVolumeUp(View view) { 
    // TODO Auto-generated method stub  
} 

OnClickListener के कार्यान्वयन निकाल दें, ताकि अपने वर्ग की परिभाषा बन जाता है में:

public class InsertViewActivity extends Activity 

UPDATE2: आप सभी बटन चाहते हैं 1 क्लिक श्रोता द्वारा संभाला जाने के लिए ऐसा कुछ करें:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Button btn1 = (Button)findViewById(R.id.btn1); 
    btn1.setOnClickListener(btnListener); 
    Button btn2 = (Button)findViewById(R.id.btn2); 
    btn2.setOnClickListener(btnListener); 
    Button btn3 = (Button)findViewById(R.id.btn3); 
    btn3.setOnClickListener(btnListener); 
} 

private OnClickListener btnListener = new OnClickListener() 
{ 

    public void onClick(View v) 
    { 
     //do the same stuff or use switch/case and get each button ID and do different 

     //stuff depending on the ID 
    } 

}; 
+0

देखें वह विधि नाम दे रहा है जैसे लेआउट फ़ाइल पर क्लिक करें। क्या यह नाम देना संभव है? चूंकि आप ऑनक्लिक लिस्टनर पर लागू होते हैं क्योंकि यह विधि लागू करना अनिवार्य है। अगर मैं गलत हूं तो कृपया मुझे बताएं ... मैंने कभी भी विधि नाम का उपयोग कभी नहीं किया है लेआउट फ़ाइल में क्लिक करें .... इसलिए मुझे यह जानकर उत्सुकता है कि – Prem

+0

मुझे यकीन नहीं है कि यह संभव है, तो उसे निश्चित रूप से अधिक विस्तार/विशिष्ट नाम का उपयोग करना चाहिए घटना हैंडलर विधि। – hovanessyan

+0

कार्यान्वयन और @Override को हटाएं और oClick1 पर विधि का नाम बदलें, फिर भी विफल हो जाएं। – SpuDy

2

आपका एक विधि इसलिए हटाने @Override

भविष्य में इससे बचने के लिए आप अपने तरीकों कि एंड्रॉयड एक्सएमएल लेआउट में जोड़ रहे हैं घोषित करने के लिए अपने खुद के एनोटेशन बना सकते हैं अधिभावी नहीं।

http://blog.blundell-apps.com/using-annotations-for-android-xml-onclick-visibility/

0

अपने दूसरे गतिविधि Manifest.xml में है:

यहाँ एक ब्लॉग पोस्ट ट्यूटोरियल है?

आपको वहां अपनी गतिविधि को जोड़ने की ज़रूरत है। नीचे दी गई कोड देखें अपनी गतिविधि में सेकेंड एक्टिविटी बदलें। और पैकेज नाम सेट थे करने के लिए अपनी गतिविधि

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="PackageName.MainActivity" android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name="PackageName.SecondActivityName" >  
    </activity> 

</application> 

2

Android 5.x मुख्य गतिविधि layout.xml में टैग विषय की जरूरत नहीं है के लिए लेआउट के विषयों में समस्या स्थित है अन्य है और यह एंड्रॉइड ओएस के लिए एक गलती है।

समाधान यहाँ है: android 5 and onClick in xml layout

संक्षेप में: 1) सभी लेआउट से टैग sheme निकालना; 2) मेनिफेस्ट

में सही शेम के साथ टैग जोड़ें मैंने एंड्रॉइड 5.X फोन के लिए प्रयास किया है - यह काम करता है।

+0

टैग शेम को हटाने का क्या मतलब है। क्या आप पुरुष योजना या थीम करते हैं? इसके अलावा, इसे हटाने से आपका क्या मतलब है। क्या आप प्रदर्शन कर सकते हैं? –

+0

शेम। हटा रहा है = हटाएं। – Denis

-1

और आपको एक और नोट होना चाहिए: सार्वजनिक शून्य onclick_method() {आपका तर्क;}। स्टूडियो आपको संकेत नहीं देता है। मैं बस इस तरह लिखता हूं और उत्तर खोजने के लिए अधिक समय बर्बाद करता हूं, अंत में मैंने पाया कि सही विधि इस तरह है: सार्वजनिक शून्य onclick_method (देखें व्यू) {आपका तर्क;} इसलिए, पैरामीटर को भूलना न भूलें ब्रैकेट!

Blockquote

0

एक आम समस्या मैंने देखा है के रूप में संरक्षित या निजी कि शुरुआती onClick प्रणाली की घोषणा करेंगे। जब आप ऐसा करते हैं तो एक्सएमएल इंजन इस समस्या को उत्पन्न करने वाली विधि तक नहीं पहुंच सकता है।

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