Acabei de implementar a v7 AppCompat
biblioteca de suporte, mas o MenuItemCompat.getActionView
retorno sempre nulo em todas as versões do Android que testei (4.2.2, 2.3.4 ....)
O SearchView
é exibido na barra de ação, mas não responde às ações de toque e não se expande para mostrar suas EditText
e é como um ícone simples.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
if (searchView != null) {
SearchViewCompat.setOnQueryTextListener(searchView, mOnQueryTextListener);
searchView.setIconifiedByDefault(false);
Log.d(TAG,"SearchView not null");
} else
Log.d(TAG, "SearchView is null");
}
return super.onCreateOptionsMenu(menu);
}
Menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_search"
app:showAsAction="always|collapseActionView"
android:icon="@drawable/abc_ic_search"
android:title="@string/action_bar_search"
android:actionViewClass="android.support.v7.widget.SearchView"/>
<item android:id="@+id/action_refresh"
android:icon="@drawable/refresh"
android:title="@string/action_bar_refresh"
app:showAsAction="ifRoom"/>
</menu>
android
searchview
android-actionbar-compat
android-search
Mohsen Afshin
fonte
fonte
android.support.v7.widget.SearchView
classe não deve ser confundida com a classe 'android.support.v4.widget.SearchViewCompat' (que é conhecido como um erro comum ao usar ActionBarCompat biblioteca)<menu xmlns:app="http://schemas.android.com/apk/res/android" >
mas obtém um erroAttribute is missing the Android namespace prefix
. Você entende e como corrige?No meu caso, era o arquivo ProGuard. Você precisa adicionar esta linha:
fonte
Para mim, uma
menu.xml
importação incorreta de namespace causou esse problema.Meu original
menu.xml
:Parece que
xmlns:app="http://schemas.android.com/tools"
estava causando oMenuItemCompat.getActionView()
retornonull
. Alterar essa importação paraxmlns:app="http://schemas.android.com/apk/res-auto"
corrigir o problema.Novo trabalho
menu.xml
:fonte
Eu acho que o problema é que você usa o SearchView do pacote Support V7 e talvez seu nível de API esteja definido como ..... 22 ??.
Alterando seu código para o seguinte, a fim de corrigir o problema:
menu.xml
fonte
Eu estava com o mesmo erro, meu método
getActionView()
sempre retornava nulo. Então, eu fiz o seguinte:Vi em alguns posts que as pessoas estão usando o app: ou yourapp, mas usei normalmente
android:ActionVewClass
.No meu
onCreateOptionsMenu
método:E não se esqueça de colocar no
onCreate
método:Isso funciona muito bem para minha atividade "estendendo" para
FragmentActivity
eActionBarActivity
.fonte
A resposta de Mohsen Afshin acima foi o meu ponto de partida e fiz alguns ajustes para fazê-lo funcionar com minha configuração:
menu.xml
fonte
Eu tinha o mesmo código, mas em vez de usar a importação
android.support.v7.widget.SearchView;
que estava usandoimport android.widget.SearchView;
. Isso corrigiu meu problema com onull
valor. Portanto, basta alterar esse código na sua atividade de pesquisa e ele funcionará e também o espaço para nome no arquivo xml.fonte
Aqui está um trecho de como lidar com o searchView da biblioteca de suporte v7:
Além disso, se você usar Proguard, adicione isso à sua configuração:
fonte
Eu tive um problema muito parecido com a diferença, pois estava tentando usar uma classe que estendia
android.widget.ImageView
Se você estiver usando o ProGuard, precisará especificar para permitir os métodos envolvidos nesta classe.
http://proguard.sourceforge.net/manual/examples.html
Isso diz: "Permitir todos os construtores necessários que possam ser chamados a partir do xml e permitir quaisquer configuradores personalizados que ele use também (adicione mais conforme necessário)"
fonte
Eu fiz isso pelo manual definido no código java:
Arquivo de layout:
Então no código java:
fonte
Remover código: public class DemoActivity estende ActionBarActivity
Substituir por: public class DemoActivity extends Activity
fonte