Không có nhiều mã để đi off đây, nhưng tôi chạy vào tình huống này bản thân mình và đây là những gì xảy ra với tôi:
Tôi đã sử dụng thư viện compat v7 để có một ActionBar trên Android 2 Tôi đang triển khai giao diện tìm kiếm.
cài đặt cơ bản Mã (trong onCreateOptionsMenu()
)
SearchManager searchManager =
(SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
SupportMenuItem searchMenuItem = ((SupportMenuItem) menu.findItem(R.id.menu_search));
SearchView searchView = (SearchView) searchMenuItem.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(activity.getComponentName()));
Bad Mã
searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// on search expand stuff
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// on search collapse stuff
return true;
}
});
Thật không may là vấn đề ở đây là chúng ta đang kêu gọi một phương pháp mà chỉ được hỗ trợ trong v14 vì vậy chúng tôi gặp lỗi thời gian chạy "lạ" khi thử tải một số lớp được sử dụng ngầm. Đó không phải là một lời giải thích rất tốt, nhưng về cơ bản đó là lý do tương tự chúng ta cần sử dụng getSupportActionBar()
thay vì getActionBar()
.
Tốt Mã
searchMenuItem.setSupportOnActionExpandListener(new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// do work
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// do work
return true;
}
});
không thể tìm thấy lớp đó. Bạn có thư viện đó trong thư mục 'libs' của bạn? –
Có, tôi có lớp SearchView trong thư viện, tôi đã nhập thư viện android-support-v7-appcompat để thêm actionbare pre API 11 – Bombolo
Bạn đã thêm thư viện hỗ trợ v7 chưa? – Azrael94