0

So I am getting an error that I can't figure out. I click a button inside my fragment to launch a dialog and my program crashes. It says in my logcat that I have no button with the id and no method for the handler. I obviously do have these things or I wouldn't be confused. I think my tired eyes are missing something obvious. Here's the .java, .xml, and the logcat any help is appreciated.

.java

public class Store_Fragment extends Fragment {
View view;

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

    view = inflater.inflate(R.layout.fragment_store, container, false);

    return view;
}

public void syncHandler (View view) {
    DialogFragment newFragment = new StoreDialog_Fragment();
    newFragment.show(getFragmentManager(), "correct store?");
}

}

.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" >

<TableRow
    android:id="@+id/tableRow1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/store_number"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/storeNum_input_ID"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="8"
        android:hint="@string/store_hint" />

    <Button
        android:id="@+id/sync_button_ID"
        style="?android:attr/borderlessButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="syncHandler"
        android:text="@string/sync" />

</TableRow>

</LinearLayout>

logcat

05-07 06:38:34.143: W/dalvikvm(1579): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
05-07 06:38:34.183: E/AndroidRuntime(1579): FATAL EXCEPTION: main
05-07 06:38:34.183: E/AndroidRuntime(1579): java.lang.IllegalStateException: Could not find a method syncHandler(View) in the activity class 
com.facilitysolutionsinc.trackflex.Main for onClick handler on view class android.widget.Button with id 'sync_button_ID'
05-07 06:38:34.183: E/AndroidRuntime(1579):     at android.view.View$1.onClick(View.java:3586)
05-07 06:38:34.183: E/AndroidRuntime(1579):     at android.view.View.performClick(View.java:4204)
05-07 06:38:34.183: E/AndroidRuntime(1579):     at android.view.View$PerformClick.run(View.java:17355)
05-07 06:38:34.183: E/AndroidRuntime(1579):     at android.os.Handler.handleCallback(Handler.java:725)
05-07 06:38:34.183: E/AndroidRuntime(1579):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-07 06:38:34.183: E/AndroidRuntime(1579):     at android.os.Looper.loop(Looper.java:137)
05-07 06:38:34.183: E/AndroidRuntime(1579):     at android.app.ActivityThread.main(ActivityThread.java:5041)
05-07 06:38:34.183: E/AndroidRuntime(1579):     at java.lang.reflect.Method.invokeNative(Native Method)
05-07 06:38:34.183: E/AndroidRuntime(1579):     at java.lang.reflect.Method.invoke(Method.java:511)
05-07 06:38:34.183: E/AndroidRuntime(1579):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-07 06:38:34.183: E/AndroidRuntime(1579):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-07 06:38:34.183: E/AndroidRuntime(1579):     at dalvik.system.NativeStart.main(Native Method)
05-07 06:38:34.183: E/AndroidRuntime(1579): Caused by: java.lang.NoSuchMethodException: syncHandler [class android.view.View]
05-07 06:38:34.183: E/AndroidRuntime(1579):     at java.lang.Class.getConstructorOrMethod(Class.java:460)
05-07 06:38:34.183: E/AndroidRuntime(1579):     at java.lang.Class.getMethod(Class.java:915)
05-07 06:38:34.183: E/AndroidRuntime(1579):     at android.view.View$1.onClick(View.java:3579)
05-07 06:38:34.183: E/AndroidRuntime(1579):     ... 11 more
mmBs
  • 8,421
  • 6
  • 38
  • 46
IrishWhiskey
  • 339
  • 5
  • 27
  • possible duplicate of [How to handle button clicks using the xml onClick within Fragments](http://stackoverflow.com/questions/6091194/how-to-handle-button-clicks-using-the-xml-onclick-within-fragments) – Pragnani May 07 '13 at 06:51
  • I believe it may be, but as I did not notice I had set the onClick incorrectly I was unaware of my issue. As soon as I read Richard's answer I recognized my blunder. – IrishWhiskey May 07 '13 at 06:56

1 Answers1

1

This way of setting on-click handlers only works for Activity objects.

You are trying to do this from within a Fragment - that is why you are getting the error.

Try either placing a syncHandler(View) method in your activity, which passes control up to the fragment, or use the traditional manual way of setting a click handler.


Update for completeness - here are my 2 suggestions, in context of the question referenced by @Pragnani (How to handle button clicks using the XML onClick within Fragments)

Community
  • 1
  • 1
Richard Le Mesurier
  • 29,432
  • 22
  • 140
  • 255