Problem med sök-funktionen, dialogen dyker inte upp!

Discussion in 'Frågor, support och diskussion' started by johle, Aug 8, 2010.

  1. johle

    johle Kid Droid Medlem

    Joined:
    Jun 8, 2010
    Messages:
    35
    Likes Received:
    0

    MINA ENHETER

    Hej alla Android-utvecklare! :)

    Jag har nu suttit ett par månader med Android-utveckling och det går verkligen framåt; så när jag tänkte lägga till en Sök-funktion enligt Android-direktiv på deras sida tyckte jag att det borde vara enkelt fixat. Men icke :(

    http://www.androidappdocs.appspot.com/guide/topics/search/search-dialog.html#PerfomingSearch

    Problemet jag har är att sök-dialogen INTE dyker upp!

    Det konstiga är att om jag t.ex. gör detta:

    Code:
    		@Override
    		public boolean onSearchRequested()
    		{
    			ErrorMessage.addErrorMessage("search invoked...");
    			showErrorMessage();
    		    return super.onSearchRequested();
    		}
    Så exekveras koden, så den märker att jag vill söka. MEN Sök-dialogen dyker inte upp!

    Jag utvecklar för API-version 4, dvs 1.6, men det borde väl inte påverka?

    Jag har provat att variera mitt Android-manifest med massvis med olika varianter enligt dokumentationen, men för tillfället ser det ut såhär. Oavsett vad jag ändrar så lyckas jag inte? :(

    HTML:
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    	package="org.vizzit" android:versionCode="1" android:versionName="1.0">
    	<application android:icon="@drawable/icon" android:label="@string/app_name"
    		android:theme="@android:style/Theme.NoTitleBar" android:debuggable="true"
    		android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation">
    		<activity android:name=".Test" android:configChanges="orientation|keyboardHidden"
    			android:launchMode="singleTop" android:label="@string/app_name">
    			<intent-filter>
    				<action android:name="android.intent.action.MAIN" />
    				<category android:name="android.intent.category.LAUNCHER" />
    
    			</intent-filter>
    			<intent-filter>
    				<action android:name="android.intent.action.SEARCH" />
    			</intent-filter>
    
    		</activity>
    		<activity android:name=".LoginActivity" android:label="@string/app_name"
    			android:configChanges="orientation|keyboardHidden" android:theme="@style/Theme"
    			android:screenOrientation="portrait">
    		</activity>
    
    		<activity android:name=".DebugActivity" android:label="@string/app_name"
    			android:configChanges="orientation|keyboardHidden" android:theme="@style/Theme"
    			android:screenOrientation="portrait">
    		</activity>
    
    		<activity android:name=".ErrorActivity" android:label="@string/app_name"
    			android:theme="@style/Theme">
    		</activity>
    
    		<!-- declare the default searchable Activity for the whole app -->
    		<meta-data android:name="android.app.default_searchable"
    			android:value=".Test" />
    
    
    	</application>
    	<uses-sdk android:minSdkVersion="4" />
    	<uses-permission android:name="android.permission.INTERNET" />
    </manifest> 
    I min onCreate kallar jag på:

    handleIntent(getIntent());


    och sedan har jag dessa funktioner:

    Code:
    @Override
    		public boolean onSearchRequested()
    		{
    			ErrorMessage.addErrorMessage("search invoked...");
    			showErrorMessage();
    		    return super.onSearchRequested();
    		}
    		
    
    	@Override
    	protected void onNewIntent(Intent intent)
    	{
    		setIntent(intent);
    		handleIntent(intent);
    	}
    
    	private void handleIntent(Intent intent)
    	{
    		if (Intent.ACTION_SEARCH.equals(intent.getAction()))
    		{
    			String query = intent.getStringExtra(SearchManager.QUERY);
    			//doMySearch(query);
    		}
    	}
    Någon som har en aning om var jag kan ha tänkt totalt fel? :/

    All hjälp och alla tips välkomnas med öppna armar!

    Tack på förhand!

    MVH

    Johan
     
  2. jhil

    jhil Kid Droid Medlem

    Joined:
    Jan 9, 2010
    Messages:
    66
    Likes Received:
    0

    MINA ENHETER

    Hej Johan!

    Kul att du fortsätter med ditt Android-hackande :-) Jag tror att sökdialogen inte dyker upp pga att du saknar meta-data för din "searchable Activity" (dvs den aktiviteten som tar hand om sökningen).

    I dokumentationen står det:
    Det du behöver göra är att lägga till (utan space mellan < och meta-data :-))
    i < activity >-taggen som hör till .Test.

    En minimal res/xml/searchable.xml ser ut såhär:
    Pröva och återkom, tack :)
     
    Last edited: Aug 8, 2010
  3. johle

    johle Kid Droid Medlem

    Joined:
    Jun 8, 2010
    Messages:
    35
    Likes Received:
    0

    MINA ENHETER

    Tjena, och tack för hjälpen!

    Som du kanske såg i min kod hade jag redan meta-taggar, men för hela applikationen, dvs att det går att söka från alla aktiviteter. Jag gjorde först som du sa, men det fungerade inte så därför provade jag koden ovan (som också finns i dokumentationen).

    Det som nu ÄNTLIGEN löste problemet, var att ha just:

    < searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_label"
    android:hint="@string/search_hint" >
    < /searchable>

    Jag hade i min iver ändrat om dessa till vanliga strings, t.ex. android:label="test" men tydligen så MÅSTE de referera till strängar i strings-filen, för nu när jag gjorde så fungerade det direkt! En aning irriterande...

    Men tack för ditt engagemang och hjälp! :) Förhoppningsvis slipper andra göra om mitt misstag...

    MVH

    Johan

    EDIT: Hmm, inte länge får man vara glad :P Försökte ta reda på när SearchManager stängs genom att implementera följande:

    Code:
    	@Override
    	public void onCancel()
    	{
    		ErrorMessage.addErrorMessage("onCancel");
    		showErrorMessage();
    		exitSearchMode();
    	}
    	
    	@Override
    	public void onDismiss()
    	{
    		ErrorMessage.addErrorMessage("onDismiss");
    		showErrorMessage();
    		exitSearchMode();
    	}
    
    Men den exekveras aldrig :/ Google ger inte några bra svar heller tycker jag :(

    Anledningen är att jag gömmer några layout-element när man öppnar sökrutan, och när den stängs vill jag visa dem igen. Dvs. om man t.ex. trycker på back-knappen innan man har sökt efter något.
     
    Last edited: Aug 9, 2010