2017-07-25 22 views
10

Hôm nay tôi quyết định dịch ứng dụng Android của tôi từ Java sang Kotlin! :) Nhưng tôi đã rất ngạc nhiên khi tôi nhập điều này:getActionView không được chấp nhận?

val searchItem = menu.findItem(R.id.action_search) 
val searchView = MenuItemCompat.getActionView(searchItem) as SearchView 

And Android Studio đã nói với tôi: "'getActionView (MenuItem!): Xem!' Không được chấp nhận trong Java "

Vì vậy, trước khi hỏi bạn giải pháp tôi yêu cầu Google giải pháp là gì và tôi tin rằng tôi tìm ra giải pháp:" Sử dụng getActionView() trực tiếp. "

Vì vậy, tôi sửa đổi mã của tôi như thế này:

val searchView = MenuItemCompat.getActionView() as SearchView 

Nhưng getActionView() vẫn vượt qua vì vậy tôi không hiểu gì cả ...

tôi sẽ rất hạnh phúc nếu bạn có thể giúp tôi:) Cảm ơn bạn !

+0

Có vấn đề gì với cách tiếp cận thứ hai của bạn? Bạn có thể đăng lỗi không? – guenhter

Trả lời

24

Các Javadoc nói:

Sử dụng getActionView() trực tiếp.

Do đó, những gì bạn cần làm là:

val searchView = searchItem.getActionView() as SearchView 
+0

Chỉ cần thêm vào điều này, [docs] (https://developer.android.com/reference/android/support/v4/view/MenuItemCompat.html#getActionView (android.view.MenuItem)) thực sự liên kết 'getActionView 'phương thức' MenuItem' trong thông tin không dùng nữa. – zsmb13

2

Bạn có thể sử dụng giống như được cung cấp trên android developer website

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the options menu from XML 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.options_menu, menu); 

    // Get the SearchView and set the searchable configuration 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
    // Assumes current activity is the searchable activity 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default 

    return true; 
} 
1

Theo đề nghị của Egor, bạn có thể làm như

này
getMenuInflater().inflate(R.menu.menu_items, menu); 
    MenuItem menuItem = menu.findItem(R.id.action_search); 

    SearchView searchView = (SearchView) menuItem.getActionView(); 
    search(searchView); 
    return true; 
+0

Sẽ tốt hơn nếu bạn có thể giải thích những gì bạn đã làm ở đó. –

0

Sử dụng actionView trực tiếp tại Kotlin, như sau:

override fun onCreateOptionsMenu(menu: Menu?): Boolean { 
    menuInflater.inflate(R.menu.actions, menu) 
    val searchItem = menu?.findItem(R.id.action_search) 
    val searchView = searchItem?.actionView as SearchView 
    searchView.animate() 
    // TODO: Configure the search info and add any event listeners... 
    return super.onCreateOptionsMenu(menu) 
} 
Các vấn đề liên quan