2011-12-20 22 views
8

Tôi đọc khá nhiều bài viết về các mảnh vỡ, nhưng tôi vẫn còn bối rối về cách làm những gì.Phương pháp onClick fragments trong phần tử fragment

Tôi có một MainActivity, hiển thị hai đoạn cạnh nhau. Trong một trong những mảnh vỡ Tôi có một nút và được định nghĩa trong XML mảnh bố trí cho nút

android:onClick="buttonClicked" 

Bây giờ tôi muốn thực hiện điều đó phương pháp

public void buttonClicked(View view) 

tôi sẽ giả định rằng điều này phải được thực hiện trong FragmentA.java và không có trong MainActivity.java. Nhưng nó chỉ hoạt động nếu phương thức đó được thực hiện trong MainActivity.java. Tại sao vậy? Đối với tôi điều đó không có ý nghĩa. Pre tổ ong một phương pháp thuộc một hoạt động ở lại trong hoạt động đó, bây giờ trên một máy tính bảng tôi sáp nhập nhiều hoạt động với một MainActivity và tất cả các phương pháp khác nhau được sáp nhập? Dù bạn đặt ví dụ nào vào FragmentA.java thì sao? Điều gì sẽ xảy ra nếu bạn phải bắt đầu một hoạt động của riêng bạn vì ứng dụng này chạy trên thiết bị cầm tay, sau đó phương thức onClick không có trong MainActivity nhưng trong Activity cần được gọi sau đó. Tôi khá bối rối vào lúc này ...

+0

Có thể do bố cục đoạn xml được tăng cao bằng ngữ cảnh hoạt động chính. Cho phép xem những gì người khác sẽ trả lời. – blessenm

+0

Ý của bạn là gì "nó chỉ hoạt động nếu phương thức được thực hiện trong' MainActivity.java' ". Bạn có gặp lỗi hay mã của bạn không cho bạn kết quả mong đợi? –

+3

http://stackoverflow.com/questions/7570575/onclick-inside-fragment-called-on-activity Đây cũng là câu hỏi được trả lời. – kzotin

Trả lời

4

Tôi không chắc vấn đề cụ thể là gì, nhưng có lẽ điều này sẽ giúp ích.

Từ các tài liệu Android trên Fragment s:

Bạn nên thiết kế mỗi mảnh như một thành phần hoạt động mô-đun và tái sử dụng. Có nghĩa là, vì mỗi phân đoạn định nghĩa cách bố trí của riêng nó và hành vi riêng của nó với các callback vòng đời riêng của nó, bạn có thể bao gồm một mảnh trong nhiều hoạt động, vì vậy bạn nên thiết kế để sử dụng lại và tránh thao tác trực tiếp một đoạn từ một đoạn khác.

Tức là, bạn không bao giờ thao tác một đoạn từ đoạn khác; thay vào đó, điều này nên được thực hiện thông qua Hoạt động cơ bản. Đọc phần "Tạo sự kiện gọi lại cho hoạt động" trong số article này để biết thêm thông tin (đó là nội dung quan trọng !!).

Mặt khác, nếu bạn muốn nút để thực hiện một hành động trong Fragment bản thân (nghĩa là nếu bạn muốn có một nhấp chuột Button để thay đổi nội dung của một TextView trong Fragment), bạn nên thực hiện điều này trong Fragment, không phải là Activity (điều này là do hành vi kết quả được chứa trong số Fragment và không liên quan gì đến phụ huynh Activity).

Để lại một bình luận và tôi có thể làm rõ nếu bài viết của tôi là khó hiểu ... Tôi chỉ mới bắt đầu hiểu được Fragment của bản thân mình :).

+4

Tôi có thể xác nhận rằng mối quan tâm của AndyAndroid được thành lập tốt. Và tôi có cùng một vấn đề với một TabHost và nhiều FragmentActivity của. Về cơ bản, phương thức onClick của tôi được gọi trong layout là mong đợi phương thức đó được định nghĩa trong lớp TabHost, KHÔNG phải là Fragment. Do đó vấn đề lớn. –

+0

Có lẽ tôi không đọc chính xác, điều này được đánh dấu là câu trả lời, nhưng làm cách nào để tạo bộ lắng nghe 'onClick' bên trong mảnh mà không cần phải tạo trình lắng nghe theo lập trình? – katit

0

Vâng,

Tôi đoán nó liên quan đến cấu trúc phân cấp của cấu trúc ngữ cảnh android. Hoạt động là máy chủ của tất cả các chế độ xem con và do đó bạn có thể nói phân đoạn thực sự đang sử dụng ngữ cảnh của máy chủ. Và đó là lý do tại sao khi bạn sử dụng onClick với hệ thống phân đoạn, hãy luôn tìm kiếm trong hoạt động Máy chủ của đoạn.

Kiểm tra. Android developer onClick attribute description

Tôi chưa chọn một thứ nhưng bạn có thể thử nghiệm. Bằng cách cung cấp triển khai trong hoạt động lưu trữ thay vì trong phân đoạn, nhưng hãy sử dụng onClick trên tệp bố cục của phân đoạn.Nó sẽ gọi phương thức của cha mẹ.

Các vấn đề liên quan