Saya baru saja mengimplementasikan v7 AppCompat
perpustakaan dukungan tetapi MenuItemCompat.getActionView
selalu mengembalikan nol di setiap versi Android yang saya uji (4.2.2, 2.3.4 ....)
The SearchView
ditampilkan dalam tindakan bar tetapi tidak merespon sentuhan tindakan dan tidak memperluas untuk menunjukkan nya EditText
dan hanya seperti ikon sederhana.
@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
sumber
sumber
android.support.v7.widget.SearchView
kelas tidak boleh bingung dengan kelas 'android.support.v4.widget.SearchViewCompat' (yang dikenal sebagai kesalahan umum saat menggunakan perpustakaan ActionBarCompat)<menu xmlns:app="http://schemas.android.com/apk/res/android" >
tetapi mendapatkan kesalahanAttribute is missing the Android namespace prefix
. Apakah Anda mendapatkannya, dan bagaimana cara memperbaikinya?Dalam kasus saya itu adalah file ProGuard. Anda perlu menambahkan baris ini:
sumber
Bagi saya,
menu.xml
impor namespace yang salah menyebabkan masalah ini.Asli saya
menu.xml
:Sepertinya
xmlns:app="http://schemas.android.com/tools"
menyebabkanMenuItemCompat.getActionView()
kembalinull
. Mengubah impor ini untukxmlns:app="http://schemas.android.com/apk/res-auto"
memperbaiki masalah.Kerja baru
menu.xml
:sumber
Saya pikir masalahnya adalah Anda menggunakan SearchView dari paket Support V7 dan mungkin level API Anda diatur ke ..... 22 ??.
Mengubah kode Anda menjadi yang berikut untuk memperbaiki masalah:
menu.xml
sumber
Saya dengan kesalahan yang sama, metode saya
getActionView()
selalu mengembalikan nol. Jadi, saya sudah membuat hal-hal berikut:Saya melihat di beberapa posting bahwa orang-orang menggunakan aplikasi: atau aplikasi Anda, tetapi saya telah menggunakan secara normal
android:ActionVewClass
.Pada
onCreateOptionsMenu
metode saya :Dan jangan lupa untuk memasukkan
onCreate
metode:Ini bekerja sangat baik untuk aktivitas saya "memperluas" untuk
FragmentActivity
danActionBarActivity
.sumber
Jawaban Mohsen Afshin di atas adalah titik awal saya dan saya membuat beberapa penyesuaian untuk membuatnya bekerja dengan pengaturan saya:
menu.xml
sumber
Saya memiliki kode yang sama, tetapi alih-alih menggunakan impor yang
android.support.v7.widget.SearchView;
saya gunakanimport android.widget.SearchView;
. Ini memperbaiki masalah saya dengannull
nilai. Jadi, ubah saja kode ini dalam aktivitas pencarian Anda dan itu akan bekerja dan juga mengubah namespace dalam file xml.sumber
Berikut cuplikan cara menangani searchView dari pustaka dukungan v7:
Juga, jika Anda menggunakan Proguard, tambahkan ini ke konfigurasinya:
sumber
Saya memiliki masalah yang sangat mirip dengan perbedaannya adalah saya mencoba menggunakan kelas yang diperluas
android.widget.ImageView
Jika Anda menggunakan ProGuard, Anda perlu menentukan untuk mengizinkan metode yang terlibat dalam kelas ini.
http://proguard.sourceforge.net/manual/examples.html
Ini mengatakan, "Izinkan semua konstruktor yang diperlukan yang mungkin dipanggil dari xml dan memungkinkan setter kustom apa pun yang digunakannya (tambahkan lebih banyak sesuai kebutuhan)"
sumber
Saya melakukan ini dengan set manual dalam kode java:
File tata letak:
Kemudian dalam kode java:
sumber
Hapus kode: DemoActivity kelas publik memperluas ActionBarActivity
Ganti dengan: DemoActivity kelas publik memperluas Aktivitas
sumber