2013-01-03 10 views
14

second_fragment.xmlAndroid app upaść (fragment) i 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) { 

    } 
} 

Jestem początkującym i nie mam pojęcia, dlaczego moja awaria aplikacji po naciśnięciu przycisku? Czy ktoś może wyjaśnić?

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

proszę umieszczać logcat więc widzimy katastrofę –

+0

można spróbować ustawienia 'OnClickListener' do przycisku od wewnątrz' funkcji onCreateView'? O ile wiem, zestaw 'onClick' ustawiony z xml spróbuje znaleźć tę funkcję w działaniu, a nie w fragmencie. – Enigma

+0

opublikuj swoje dane wyjściowe logcat .. tak możemy zrozumieć problem – Janmejoy

Odpowiedz

38

aktywny:

Jeśli mają aktywność i jeśli określić atrybut XML wtedy po prostu trzeba zdefiniować metodę z to samo imię w Działaniu.

Fragment:

Ale gdy masz Fragment a jeśli chcesz zdefiniować kliknij słuchacza tylko przez zdefiniowanie atrybutu następnie trzeba określić metodę o tej samej nazwie w rzeczywistej działalności, z którego fragment został nazwany .

LUB w inny sposób można po prostu zaimplementować program do nasłuchiwania kliknięć programowo.

+3

Uratowałem mój dzień :) –

5

Jeśli zdefiniujemy onClick="button" w .xml trzeba definiują metodę o nazwie public void button(View v) w Aktywny który nazywamy fragment, a nie samego fragmentu.

public class MainActivity extends FragmentActivity{ 

... 

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

... 

} 
1

Twój przycisk metody musi być zdefiniowany w klasie MainActivity.

8

Zaoszczędzisz sobie wiele kłopotów, programując programowo (zamiast za pomocą XML) onClickListener. To powinno pomóc zrobić to, co próbujesz zrobić:

@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

Użyłem także wariantu XML. Niektóre metody działają, niektóre nie można znaleźć. Właśnie wróciłem do słuchaczy i wszystko działa znaleźć –

1

ten pracuje dla mnie: (studio Android)

@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 
Powiązane problemy