2015-09-21 14 views
9

Trong dự án Android hiện tại của tôi, tôi sử dụng thư viện Butterknife để ràng buộc chế độ xem và sử dụng chú thích onClick cho chúng. Tất cả điều này đều hoạt động tốt ngay cả trong các đoạn nhưng bây giờ tôi đang ở điểm mà tôi không thể tìm thấy giải pháp:Butterknife liên kết SearchView từ Menu

Tôi sử dụng ToolBar mới làm ActionBar và tăng cường Menu bằng SearchView trong đó. Đối với điều này SearchView Tôi muốn sử dụng chú thích @OnTextChanged nhưng khi tôi gọi phương thức liên kết với ActionView của mục menu Butterknife cố gắng khôi phục lại tất cả Lượt xem và tất nhiên trong số ActionView thì không thể tìm thấy bất kỳ Chế độ xem nào khác của RootLayout.

Vậy là có một cách để thêm chỉ có một View với Butterknife hay tôi có thể nhận được một Xem trong đó có tất cả các quan điểm từ tôi RootLayoutToolBarView vì vậy tôi có thể vượt qua Xem này với phương pháp ràng buộc? Ví dụ trong Activites tôi có thể gọi findViewById cũng cho ID trình đơn nhưng nếu tôi sử dụng getView() từ phân đoạn của tôi nó không hoạt động. Bất kỳ ý tưởng cho điều này?

+0

Một tính năng được yêu cầu để thực hiện điều này, nhưng nó đã bị từ chối bởi Jake Wharton. Vui lòng xem vấn đề [# 41] (https://github.com/JakeWharton/butterknife/issues/41) và [# 416] (https://github.com/JakeWharton/butterknife/issues/416) và nói ** Tôi muốn giữ điều này chỉ tập trung vào việc hỗ trợ những thứ chỉ xem được. ** – Sufian

Trả lời

7

Tôi nghĩ điều này là không thể vì SearchView là một mục menu. Id bạn đang sử dụng trong khai báo menu xác định chế độ xem này trong menu, không phải là chế độ xem của hoạt động, đó có thể là lý do tại sao Butterknife không thể liên kết nó.

Tôi sợ bạn sẽ phải làm:

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.bookings_list_menu, menu); 
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 

    searchView.setOnSearchClickListener(...); 
    searchView.setOnCloseListener(...); 
    searchView.setOnQueryTextListener(...); 

    super.onCreateOptionsMenu(menu, inflater); 
}