Autore Topic: passaggio parametri dopo una ACTION_SEARCH  (Letto 742 volte)

Offline lucazap

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC-Magic
  • Sistema operativo:
    Ubuntu
passaggio parametri dopo una ACTION_SEARCH
« il: 17 Novembre 2011, 14:07:01 CET »
0
Domanda da principiante.
Ho una activity principale che lancia con startActivityForResult una seconda Activity e si mette in attesa del risultato.
Dalla seconda faccio una chiamata a onSearchRequested() e passo ad una terza ActivityList.
Come faccio a ricevere i parametri nell'activity principale .. se li passo dalla terza Activity? O_o

In fondo ho allegato il rar del progetto.

Ecco il codice se non volete scaricare l'allegato:
Main.java
Codice (Java): [Seleziona]
package it.apogeo.android.cap16.suggestedsearchable;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class Main extends Activity{

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                Intent i = new Intent(getApplicationContext(),SuggestedSearchableActivity.class);
                startActivityForResult(i , 10);
               
        }
               
                @Override
                protected void onActivityResult(int requestCode, int resultCode, Intent data) {

                        if (resultCode == RESULT_OK && requestCode == 10) {
                                if (data.hasExtra("param_nome_comune")) {
                                         Toast.makeText(this," arriva?? --> "+data.getExtras().getString("param_nome_comune"),Toast.LENGTH_SHORT).show();

                                }

                        }
                }
       
       
}

secondaActiv
Codice (Java): [Seleziona]
/**
 *
 */

package it.apogeo.android.cap16.suggestedsearchable;

import java.util.LinkedList;
import java.util.List;

import android.app.ListActivity;
import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;
import android.provider.SearchRecentSuggestions;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

/**
 * Attività searchable
 *
 * @author MASSIMO
 *
 */

public class SearchResultActivity extends ListActivity {
       
        /*
         * Conterrà l'elenco delle parole chiavi di Java
         */

        private String[] keywords;
        private String parametro;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                // Leggiamo le informazioni associate alle parole chiave
                keywords = getResources().getStringArray(R.array.javakeywords);
                // Verifichiamo se l'attività è stata attivata a seguito di una ricerca
                Intent intent = getIntent();
                // Otteniamo la corrispondente Action
                String intentAction = intent.getAction();
                if(Intent.ACTION_SEARCH.equals(intentAction)){
                        // In questo caso si tratta di una richiesta di ricerca per cui
                        // estrapoliamo il valore del testo da ricercare
                        String textToSearch = intent.getStringExtra(SearchManager.QUERY);
                        // Gestiamo la memorizzazione dei risultati recenti
                SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
                        JavaKeywordSuggestionsProvider.AUTHORITY, JavaKeywordSuggestionsProvider.MODE);
                suggestions.saveRecentQuery(textToSearch, null);                       
                        // Se la Stringa è diversa otteniamo tutte le voci che iniziamo per
                        // il testo indicato in modo case insensitive e lo visualizziamo
                        if(textToSearch!=null && !"".equals(textToSearch)){
                                List<String> results = new LinkedList<String>();
                                String textLower = textToSearch.toLowerCase();
                                for(int i=0;i<keywords.length;i++){
                                        if(keywords[i].startsWith(textLower)){
                                                results.add(keywords[i]);
                                        }
                                }
                                // Creiamo l'ArrayAdapter
                                ArrayAdapter<String> resultAdapter= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,results);
                                setListAdapter(resultAdapter);
                        }
                }else{
                        // In questo caso visualizziamo la lista vuota
                }
        }
       
        @Override
        public void finish() { 
       
                Intent data = new Intent();
                data.putExtra("param_nome_comune", parametro);
                setResult(RESULT_OK, data);
                Toast.makeText(getApplicationContext(), "-->"+parametro, Toast.LENGTH_SHORT).show();
                super.finish();
        }
       
        @Override
        protected void onListItemClick(ListView paramListView, View paramView, int paramInt, long paramLong)
                  {            
                parametro=paramListView.getAdapter().getItem(paramInt).toString();
                finish();
        }
       
       
       

}




Terza Activ
Codice (Java): [Seleziona]
package it.apogeo.android.cap16.suggestedsearchable;

import android.app.Activity;
import android.app.SearchManager;
import android.app.SearchManager.OnCancelListener;
import android.app.SearchManager.OnDismissListener;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

public class SuggestedSearchableActivity extends Activity {
        /*
         * Tag del log
         */

        private final static String TAG_LOG = "SuggestedSearchableActivity";
        /*
         * Identificatore dell'item di ricerca
         */

        private final static int SEARCH_ITEM_ID = 1;
        /*
         * Riferimento al SearchManager
         */

        private SearchManager searchManager;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                // Caso di ricerca locale
                //setDefaultKeyMode(DEFAULT_KEYS_SEARCH_GLOBAL);       
                setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
                // Otteniamo il riferimento al SearchManager
                searchManager = (SearchManager)getSystemService(SEARCH_SERVICE);
                // Registriamo l'evento di Cancel
                searchManager.setOnCancelListener(new OnCancelListener(){

                        public void onCancel() {
                                Log.i(TAG_LOG, "Search Cancelled!!!");
                        }
                       
                });
                // Registriamo l'evento di Dismiss
                searchManager.setOnDismissListener(new OnDismissListener(){

                        public void onDismiss() {
                                Log.i(TAG_LOG, "Search Dismissed!!!");
                        }
                       
                });
                onSearchRequested();
        }



}

Manifest
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="it.apogeo.android.cap16.suggestedsearchable"
        android:versionCode="1" android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
       
        <activity android:name=".Main"
                        android:label="@string/app_name">
                        <intent-filter>
                                <action android:name="android.intent.action.MAIN" />
                                <category android:name="android.intent.category.LAUNCHER" />
                        </intent-filter>
                </activity>
       
                <activity android:name=".SuggestedSearchableActivity"
                        android:label="@string/app_name">                      
                        <meta-data android:name="android.app.default_searchable"
                                android:value=".SearchResultActivity" />
                </activity>
                <activity android:name="SearchResultActivity" android:label="MySearchable">
                        <intent-filter>
                                <action android:name="android.intent.action.SEARCH" />
                                <category android:name="android.intent.category.DEFAULT" />
                        </intent-filter>
                        <meta-data android:name="android.app.searchable"
                                android:resource="@xml/my_searchable"></meta-data>
                </activity>
        <provider android:name=".JavaKeywordSuggestionsProvider"
                  android:authorities="it.apogeo.android.cap16.suggestedsearchable.JavaKeywordSuggestionsProvider" />          
        </application>
        <uses-sdk android:minSdkVersion="5" />

</manifest>


Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:passaggio parametri dopo una ACTION_SEARCH
« Risposta #1 il: 17 Novembre 2011, 16:57:42 CET »
0
Hai 2 strade.

Dalla terza passi alla seconda i dati che a sua volta li passa alla prima.

Dalla terza passi i dati alle prima semplicemente richiamandola con startActivity ... recuperi i dati all' onCreate della prima.

Io farei la prima ipotesi.
La domanda stupida è quella che non si fa

Offline lucazap

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC-Magic
  • Sistema operativo:
    Ubuntu
Re:passaggio parametri dopo una ACTION_SEARCH
« Risposta #2 il: 17 Novembre 2011, 18:05:34 CET »
0
Grazie per la risposta.
Scusami, ho provato.. ma non son mica riuscito a far arrivare i parametri alla prima Activity.
Mi rimane rimane piantato nella seconda Activ.

Io ho fatto questa modifica nella terza activ:
Codice (Java): [Seleziona]
@Override
        public void finish() { 
       
                Intent i=new Intent(this,SuggestedSearchableActivity.class);
                i.putExtra("par",parametro);
                startActivity(i);
                Toast.makeText(getApplicationContext(), "-->"+parametro, Toast.LENGTH_SHORT).show();
                super.finish();
        }

e questa nella seconda:
Codice (Java): [Seleziona]
public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
               
                Bundle u=getIntent().getExtras();
                if(u!=null){
                        Intent data = new Intent();            
                        data.putExtra("param_nome_comune", u.getString("par"));
                        setResult(RESULT_OK, data);
                        Toast.makeText(getApplicationContext(), "terra di mezzo-->"+u.getString("par"), Toast.LENGTH_SHORT).show();
                        finish();
                }
                // Caso di ricerca locale
...


Offline lucazap

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC-Magic
  • Sistema operativo:
    Ubuntu
Re:passaggio parametri dopo una ACTION_SEARCH
« Risposta #3 il: 17 Novembre 2011, 18:15:11 CET »
0
Se invece passo i dati dalla terza alla prima (richiamandola con startActivity ) ... perdo tutti i dati precedentemente salvati nelle variabili della prima activity grrrrrrrr

Offline lucazap

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC-Magic
  • Sistema operativo:
    Ubuntu
Re:passaggio parametri dopo una ACTION_SEARCH
« Risposta #4 il: 18 Novembre 2011, 08:29:22 CET »
0
toc toc  :-(

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:passaggio parametri dopo una ACTION_SEARCH
« Risposta #5 il: 18 Novembre 2011, 17:44:32 CET »
0
Ciao scusa il ritardo...

Cmq ti ho preparato un piccolo esempio..  con 3 Activity

Ogni Activity passa all' altra il dato.. la terza passa alla prima...

E' uno dei metodi... altre volte ho utilizzato l' inverso cioè la terza si chiude con finish() e all' onActivityResult della seconda recupero il dato e dopo esegue a suo volta un finish(); passando il dato alla prima...

Ciao fammi sapere

La domanda stupida è quella che non si fa

Offline lucazap

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC-Magic
  • Sistema operativo:
    Ubuntu
Re:passaggio parametri dopo una ACTION_SEARCH
« Risposta #6 il: 24 Novembre 2011, 22:14:47 CET »
0
Grazie per la risposta,
ma cosi facendo non si risolve il problema perchè, dalla Terza,
viene lanciata una nuova activity anzichè tornare alla prima (quella già aperta) -->quindi tutti i valori che avevo precedentemente memorizzato vengono persi.
Allego il tuo esmpio modificato