2013-01-03 26 views
14

second_fragment.xml दुर्घटनाग्रस्त एप्लिकेशनएंड्रॉयड (टुकड़ा और xml onclick)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/f2_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/f2_textview" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/f2_tv" /> 

<Button 
    android:id="@+id/f2_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="button" 
    android:text="@string/f2_bttn" /> 

SecondFragment.java

public class SecondFragment extends Fragment { 

    FragmentInterface iface; 

    public interface FragmentInterface { 
     public void buttonPressed(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     return inflater.inflate(R.layout.second_fragment, container, false); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception 
     try { 
      iface = (FragmentInterface) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement FragmentInterface"); 
     } 

    } 

    public void button(View view) { 

    } 
} 

मैं नौसिखिया हूँ और मुझे पता नहीं क्यों अपने आवेदन दुर्घटना, जब बटन दबाया जाता है? क्या कोई समझा सकता है?

01-03 13:28:25.612: E/AndroidRuntime(1276): FATAL EXCEPTION: main 
01-03 13:28:25.612: E/AndroidRuntime(1276): java.lang.IllegalStateException: Could not find a method button(View) in the activity class com.sp.fragments.MainActivity for onClick handler on view class android.widget.Button with id 'f2_button' 
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.view.View$1.onClick(View.java:3584) 
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.view.View.performClick(View.java:4202) 
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.view.View$PerformClick.run(View.java:17340) 
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.os.Handler.handleCallback(Handler.java:725) 
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.os.Handler.dispatchMessage(Handler.java:92) 
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.os.Looper.loop(Looper.java:137) 
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.app.ActivityThread.main(ActivityThread.java:5039) 
01-03 13:28:25.612: E/AndroidRuntime(1276): at java.lang.reflect.Method.invokeNative(Native Method) 
01-03 13:28:25.612: E/AndroidRuntime(1276): at java.lang.reflect.Method.invoke(Method.java:511) 
01-03 13:28:25.612: E/AndroidRuntime(1276): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
01-03 13:28:25.612: E/AndroidRuntime(1276): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
01-03 13:28:25.612: E/AndroidRuntime(1276): at dalvik.system.NativeStart.main(Native Method) 
01-03 13:28:25.612: E/AndroidRuntime(1276): Caused by: java.lang.NoSuchMethodException: button [class android.view.View] 
01-03 13:28:25.612: E/AndroidRuntime(1276): at java.lang.Class.getConstructorOrMethod(Class.java:460) 
01-03 13:28:25.612: E/AndroidRuntime(1276): at java.lang.Class.getMethod(Class.java:915) 
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.view.View$1.onClick(View.java:3577) 
01-03 13:28:25.612: E/AndroidRuntime(1276): ... 11 more 
01-03 13:28:27.563: I/Process(1276): Sending signal. PID: 1276 SIG: 9 
+2

LogCat पोस्ट करें ताकि हम अपने 'onCreateView' समारोह अंदर से दुर्घटना –

+0

तुम कोशिश कर सकते हैं अपने बटन को' OnClickListener' की स्थापना देख सकते हैं? जहां तक ​​मुझे लगता है, एक्सएमएल से 'ऑनक्लिक' सेट गतिविधि में उस कार्य को खोजने की कोशिश करेगा, न कि खंड में। – Enigma

+0

अपना लॉगक आउटपुट पोस्ट करें .. इसलिए हम इस मुद्दे के बारे में – Janmejoy

उत्तर

38

गतिविधि:

तो गतिविधि कर रहे हैं और यदि आप XML में प्रत्येक का उपयोग करता है तो आप बस के साथ एक विधि परिभाषित करने की जरूरत गतिविधि में एक ही नाम।

टुकड़ा:

लेकिन जब भी आप टुकड़ा है और यदि आप सिर्फ विशेषता को परिभाषित करते हुए क्लिक श्रोता परिभाषित करना चाहते हैं तो आप जहां टुकड़ा बुलाया गया है से वास्तविक गतिविधि में एक ही नाम के साथ एक विधि को परिभाषित करने के लिए है ।

या अन्यथा, आप बस एक क्लिक श्रोता प्रोग्रामेटिक रूप से कार्यान्वित कर सकते हैं।

+3

मेरा दिन बचाया :) –

5

आप अपनी .xml में onClick="button" परिभाषित यदि आप एक विधि गतिविधि जो टुकड़ा कहते हैं, टुकड़ा अपने आप में नहीं में public void button(View v) नामित परिभाषित करते हैं की जरूरत है।

public class MainActivity extends FragmentActivity{ 

... 

    public void button(View v){ 
    ... 
    } 

... 

} 
1

आपका विधि बटन मुख्य गतिविधि वर्ग में परिभाषित किया जाना चाहिए।

8

onClickListener प्रोग्रामेटिक रूप से (एक्सएमएल के माध्यम से) को सेट करके आप खुद को बहुत परेशानी बचाएंगे। यह मदद करनी चाहिए तुम क्या करने की कोशिश कर रहे क्या करना:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    final View view = inflater.inflate(R.layout.second_fragment, container, false); 
    final View button = view.findViewById(R.id.f2_button); 
    button.setOnClickListener(
     new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       /* DO SOMETHING UPON THE CLICK */ 
      } 
     } 
    ); 
    return view; 
} 
+0

मैंने एक्सएमएल संस्करण का भी उपयोग किया। कुछ तरीके काम करते हैं, कुछ नहीं मिल सका। बस श्रोताओं के पास वापस चला गया और सबकुछ काम करता है –

1

यह मेरे लिए काम किया गया है: (एंड्रॉयड स्टूडियो)

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.update_credential, container, false); 
     Button bt_login = (Button) rootView.findViewById(R.id.btnSend); 

     bt_login.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       System.out.println("Hi its me"); 


      }// end onClick 
     }); 

     return rootView; 

    }// end onCreateView 
संबंधित मुद्दे