Mempertahankan Kompatibilitas Mundur

SearchView dan panel tindakan hanya tersedia di Android 3.0 dan yang lebih baru. Untuk mendukung platform lama, Anda dapat kembali ke dialog penelusuran. Dialog penelusuran adalah UI yang disediakan sistem yang ditempatkan di atas aplikasi Anda saat dipanggil.

Menetapkan level Minimum dan API Target

Untuk menyiapkan dialog penelusuran, pertama-tama deklarasikan dalam manifes bahwa Anda ingin mendukung perangkat lama, tetapi ingin menargetkan Android 3.0 atau versi yang lebih baru. Jika Anda melakukannya, aplikasi akan otomatis menggunakan panel tindakan di Android 3.0 atau yang lebih baru dan menggunakan sistem menu tradisional di perangkat lama:

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />

<application>
...

Menyediakan Dialog Penelusuran untuk Perangkat Lama

Untuk memanggil dialog penelusuran di perangkat yang lebih lama, panggil onSearchRequested() setiap kali pengguna memilih item menu penelusuran dari menu opsi. Karena perangkat Android 3.0 dan yang lebih baru menampilkan SearchView di panel tindakan (seperti yang ditunjukkan di tutorial pertama), hanya versi yang lebih lama dari 3.0 yang memanggil onOptionsItemSelected() saat pengguna memilih item menu penelusuran.

Kotlin

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when (item.itemId) {
        R.id.search -> {
            onSearchRequested()
            true
        }
        else -> false
    }
}

Java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.search:
            onSearchRequested();
            return true;
        default:
            return false;
    }
}

Memeriksa Versi Build Android pada Waktu Proses

Pada waktu proses, periksa versi perangkat untuk memastikan penggunaan SearchView yang tidak didukung tidak terjadi di perangkat lama. Dalam kode contoh kami, hal ini terjadi dalam metode onCreateOptionsMenu():

Kotlin

override fun onCreateOptionsMenu(menu: Menu): Boolean {

    menuInflater.inflate(R.menu.options_menu, menu)

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
        (menu.findItem(R.id.search).actionView as SearchView).apply {
            setSearchableInfo(searchManager.getSearchableInfo(componentName))
            setIconifiedByDefault(false)
        }
    }
    return true
}

Java

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();
        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(false);
    }
    return true;
}