2013-01-03 27 views
14

second_fragment.xmlứng dụng Android đâm (đoạn và 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) { 

    } 
} 

Tôi newbie và tôi không có ý tưởng tại sao tai nạn ứng dụng của tôi, khi nhấn nút? Bất cứ ai có thể giải thích?

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

xin vui lòng đăng LogCat vì vậy chúng tôi có thể nhìn thấy sự sụp đổ –

+0

Bạn có thể thử thiết lập 'OnClickListener' để nút của bạn từ bên trong' chức năng onCreateView' của bạn? Theo tôi nghĩ, 'onClick' được đặt từ xml sẽ cố gắng tìm chức năng đó trong hoạt động chứ không phải trong phân đoạn. – Enigma

+0

đăng đầu ra logcat của bạn .. vì vậy chúng tôi có thể hiểu về vấn đề – Janmejoy

Trả lời

38

Hoạt động:

Nếu đang có hoạt động và nếu bạn xác định thuộc tính trong XML thì bạn chỉ cần xác định một phương pháp với cùng tên trong Hoạt động.

Fragment:

Nhưng bất cứ khi nào bạn có Fragment và nếu quý vị muốn xác định nhấp chuột nghe bằng cách chỉ định thuộc tính sau đó bạn phải xác định một phương pháp có cùng tên trong hoạt động thực tế từ nơi Fragment đã gọi .

HOẶC nếu không, bạn có thể chỉ cần triển khai trình nghe nhấp chuột theo lập trình.

+3

Đã lưu ngày của tôi :) –

5

Nếu bạn xác định onClick="button" trong .xml của bạn, bạn cần làm định nghĩa một phương thức có tên public void button(View v) trong Hoạt động mà gọi đoạn, không phải trong đoạn riêng của mình.

public class MainActivity extends FragmentActivity{ 

... 

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

... 

} 
1

Nút phương pháp của bạn phải được xác định trong lớp MainActivity.

8

Bạn sẽ tiết kiệm cho mình rất nhiều rắc rối bằng cách đặt onClickListener theo chương trình (thay vì qua XML). Điều này sẽ giúp bạn làm những gì bạn đang cố gắng để làm:

@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

Tôi cũng đã sử dụng biến thể XML. Một số phương pháp làm việc, một số không thể được tìm thấy. Chỉ cần quay lại với người nghe và mọi thứ hoạt động tìm thấy –

1

này đã làm việc cho tôi: (Android studio)

@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 
Các vấn đề liên quan