2017-12-09 5 views
0

Ich versuche, die search interface manual von android.com zu folgen. Ich habe wenig Probleme und bin mir nicht sicher, was genau ich falsch gemacht habe. enter image description hereEinfache Android SearchView funktioniert nicht richtig

Wenn Sie sehen wollen, hier ist die project as zip Datei.

1- Die android:hint ist nicht sichtbar, wenn ich das Suchsymbol berühre. Es kommt leer. Warum? Wenn ich es programmgesteuert setze funktioniert es zB. searchView.setQueryHint(getString(R.string.search_hint)); Warum funktioniert es nicht von XML? enter image description here

2- Suchfeld nicht Fokus und Tastatur nicht automatisch angezeigt, wenn ich Suchsymbol berühren. Ich muss das Suchfeld berühren, um den Fokus zu bekommen. Ich glaube, es sollte automatisch fokussiert werden?

3- Wenn ich etwas schreibe und das Suchsymbol auf der Tastatur berühre. Ich sehe keine Protokolleinträge, die im Logcat-Fenster protokolliert wurden. Was fehlt?

4- (Gelöst) Ich versuchte android:iconifiedByDefault="false" in XML und auch searchView.setIconifiedByDefault(false); und es ist immer ikonifiziert, wenn ich die Anwendung starte. Warum passiert das?

  • Ich fand heraus, dass iI collapseActionView von app:showAsAction sonst setIconifiedByDefault(false) funktioniert nicht entfernen müssen. Auch wenn Sie collapseActionView entfernen und setIconifiedByDefault(false) setzen, bricht es nie zusammen.

Ich vermute, ich etwas irgendwo verpasst, aber ich bin nicht sicher, was genau ...

sind also unter die Schritte, die ich gefolgt:

Ich begann ein neues Projekt mit ‚Grund Activity‘ Android Studio 3. Es hat eine fertige Symbolleiste und "Hallo Welt" in der Mitte.

Dann xml Ordner hinzugefügt ich die searchable.xml Datei mit Inhalt:

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/app_name" 
    android:hint="Search hint text" 
    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"> 
</searchable> 

geändert Dann AndroidManifest.xml Datei und eine Aktivität hinzugefügt:

<activity android:name=".SearchableActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
    </intent-filter> 
    <meta-data android:name="android.app.searchable" 
     android:resource="@xml/searchable"/> 
</activity> 

Dann ein einfaches SearchableActivity.class erstellt. Nur um ein paar Zeilen zu schreiben.

package com.test.myapplication; 

import android.app.ListActivity; 
import android.app.SearchManager; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 

public class SearchableActivity extends ListActivity { 
    private static String TAG = SearchableActivity.class.getSimpleName(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     Log.d(TAG, "onCreate"); 
     super.onCreate(savedInstanceState); 

     handleIntent(getIntent()); 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     handleIntent(intent); 
    } 

    private void handleIntent(Intent intent) { 
     Log.d(TAG, "handleIntent"); 
     if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      String query = intent.getStringExtra(SearchManager.QUERY); 
      //use the query to search your data somehow 
     } 
    } 
} 

hinzugefügt Dann menu_main.xml die notwendigen Artikel zu bestehenden:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="com.test.myapplication.MainActivity"> 
    <item android:id="@+id/search" 
     android:title="@string/app_name" 
     android:icon="@android:drawable/ic_menu_search" 
     app:showAsAction="collapseActionView|ifRoom" 
     app:actionViewClass="android.widget.SearchView" /> 
    <item 
     android:id="@+id/action_settings" 
     android:orderInCategory="100" 
     android:title="@string/action_settings" 
     app:showAsAction="never" /> 
</menu> 

Update: Wenn ich app:actionViewClass="android.support.v7.widget.SearchView" und auch in MainActivity.class ändern, wenn ich import android.support.v7.widget.SearchView; dann importieren, wenn ich auf das Suchsymbol klicken, zeigt es Standard Search... Text wird automatisch fokussiert. Aber zeigt keinen Hinweis von XML an und dennoch gibt es keine Protokolleinträge, wenn ich Informationen einreiche. enter image description here

UPDATE:

Ich erkannte, dass, wenn ich die intent-filter setzen und den meta Teil unter MainActivity ich die Suchabsicht innerhalb Haupttätigkeit bin immer. Aber ich verstehe nicht, warum es die SearchableActivity nicht startet. Da manuelle Seite für SearchView klar sagt:

Wenn ein Benutzer eine Suche aus dem Suchdialog oder Widget ausführt, startet das System Ihre durchsuchbare Aktivität und sendet es eine ACTION_SEARCH Absicht.

Antwort

0

Scheinbar alles, was ich brauchte, war zu tun, um die Absicht zu übermitteln Aktivität zu korrigieren von onCreateOptionsMenu()

// Get the SearchView and set the searchable configuration 
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
ComponentName componentName = new ComponentName(this, SearchableActivity.class); 
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); 
if (searchManager != null) 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName)); 
1

verwenden

app:actionViewClass="android.support.v7.widget.SearchView" 

Statt dieser

app:actionViewClass="android.widget.SearchView" 
+0

Ich habe versucht, dass und es löst nur 1 Problem. Jetzt bekommt das Suchfeld den Fokus. –

+0

@EvrenYurtseite Versuchen Sie dies ** 'app: showAsAction =" collapseActionView | immer "' ** –

+0

Es macht keinen Unterschied. Mein Verständnis ist, dass "immer" bedeutet, dass die Aktion nicht ins Menü geht. Aber ich fand heraus, dass ich 'collapseActionView' entfernen sollte und es wird nicht zusammenbrechen. Wie auch immer, das größte Problem ist, dass 'SearchView' anscheinend nichts tut, wenn ich Text einreiche und ich verstehe nicht warum? –

Verwandte Themen