2017-07-25 1 views
10

Aujourd'hui, je décide de traduire mon application Android de Java à Kotlin! :) Mais j'étais très surprise quand je tape ceci:getActionView est obsolète?

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

Et Android studio m'a dit: " 'getActionView (MenuItem!): Voir' Alors déprécié en Java "

Alors avant de vous poser la question je demande à Google quelle est la solution et je crois que je trouve la solution:" Utiliser getActionView() directement. "

Je modifié mon code comme ceci:

val searchView = MenuItemCompat.getActionView() as SearchView 

Mais getActionView() est encore traversé, donc je ne comprends pas du tout ...

Je serai très heureux si vous pouvez me aider:) Je vous remercie !

+0

Quel est le problème avec votre deuxième approche? Pouvez-vous poster l'erreur? – guenhter

Répondre

24

Le Javadoc dit:

Utilisez getActionView() directement.

Par conséquent, ce que vous devez faire est:

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

Juste pour ajouter à cela, les documents [docs] (https://developer.android.com/reference/android/support/v4/view/MenuItemCompat.html#getActionView (android.view.MenuItem)) lient en fait 'getActionView 'méthode de' MenuItem' dans les informations de dépréciation. – zsmb13

2

Vous pouvez utiliser le même que prévu sur android developer site

@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

Comme suggéré par Egor, vous pouvez le faire comme ça

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

Ce serait encore mieux si vous pouviez expliquer ce que vous avez fait là-bas. –

0

Utilisez actionView directement Kotlin, comme ceci:

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) 
}