studio - load an activity android




Come ottengo ulteriori dati dall'intenzione su Android? (11)

Come posso inviare dati da un'attività (intento) a un altro?

Io uso questo codice per inviare dati:

Intent i=new Intent(context,SendMessage.class);
i.putExtra("id", user.getUserAccountId()+"");
i.putExtra("name", user.getUserFullName());
context.startActivity(i);

Questo è per adattatore, per attività hai solo bisogno di cambiare mContext con il tuo nome Activty e per il frammento devi cambiare mContext per getActivity ()

 public static ArrayList<String> tags_array ;// static array list if you want to pass array data

      public void sendDataBundle(){
            tags_array = new ArrayList();
            tags_array.add("hashtag");//few array data
            tags_array.add("selling");
            tags_array.add("cityname");
            tags_array.add("more");
            tags_array.add("mobile");
            tags_array.add("android");
            tags_array.add("dress");
            Intent su = new Intent(mContext, ViewItemActivity.class);
            Bundle bun1 = new Bundle();
            bun1.putString("product_title","My Product Titile");
            bun1.putString("product_description", "My Product Discription");
            bun1.putString("category", "Product Category");
            bun1.putStringArrayList("hashtag", tags_array);//to pass array list 
            su.putExtras(bun1);
            mContext.startActivity(su);
        }

Addizionare

Imposta dati

String value = "Hello World!";
Intent intent = new Intent(getApplicationContext(), NewActivity.class);
intent.putExtra("sample_name", value);
startActivity(intent);

Ottieni dati

String value;
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
    value = bundle.getString("sample_name");
}

Ottenere diversi tipi di extra dall'intento

Per accedere ai dati da Intent è necessario conoscere due cose.

  • CHIAVE
  • DataType dei tuoi dati.

Esistono diversi metodi nella classe Intent per estrarre tipi diversi di tipi di dati. Sembra così

getIntent (). XXXX (KEY) o intent.XXX (KEY);


Quindi se conosci il tipo di dati della tua varibale che hai impostato in otherActivity puoi usare il rispettivo metodo.

Esempio per recuperare la stringa nella tua attività dall'intento

String profileName = getIntent().getStringExtra("SomeKey");

Elenco di diverse varianti di metodi per dataType diversi

Puoi vedere l'elenco dei metodi disponibili nella Documentazione ufficiale di Intent .


Ho appena postato una risposta here che tratta questo argomento in modo un po 'più dettagliato, incluse alcune alternative.

Utilizza Vapor API , un nuovo framework Android ispirato a jQuery che ho scritto per semplificare gli sviluppatori di Android. Controlla l'esempio in questa risposta per come puoi facilmente passare i dati tra le attività.

Inoltre dimostra VaporIntent , che ti permette di chiamare i metodi a catena e utilizzare il metodo .put(...) sovraccarico:

 $.Intent().put("data", "myData").put("more", 568)... 

Puoi facilmente trasferire i dati sull'intera applicazione utilizzando Vapor API , quindi spero che sia utile per te e per gli altri durante lo sviluppo di app.


Invece di inizializzare un altro nuovo Intento per ricevere i dati, fai semplicemente questo:

String id = getIntent().getStringExtra("id");

Nell'attività di ricezione

Bundle extras = getIntent().getExtras(); 
String userName;

if (extras != null) {
    userName = extras.getString("name");
    // and get whatever type user account id is
}

Possiamo farlo con mezzi semplici:

In FirstActivity:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("uid", uid.toString());
intent.putExtra("pwd", pwd.toString());
startActivity(intent);

In SecondActivity:

    try {
        Intent intent = getIntent();

        String uid = intent.getStringExtra("uid");
        String pwd = intent.getStringExtra("pwd");

    } catch (Exception e) {
        e.printStackTrace();
        Log.e("getStringExtra_EX", e + "");
    }

Puoi anche fare così
// metti valore nell'intento

    Intent in = new Intent(MainActivity.this, Booked.class);
    in.putExtra("filter", "Booked");
    startActivity(in);

// ottiene valore dall'intenzione

    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();
    String filter = bundle.getString("filter");

Se usato in FragmentActivity, prova questo:

La prima pagina estende FragmentActivity

Intent Tabdetail = new Intent(getApplicationContext(), ReceivePage.class);
Tabdetail.putExtra("Marker", marker.getTitle().toString());
startActivity(Tabdetail);

Nel frammento, devi solo chiamare getActivity() prima,

La seconda pagina estende Fragment :

String receive = getActivity().getIntent().getExtras().getString("name");

Solo un suggerimento:

Invece di usare "id" o "name" nel tuo i.putExtra ("id" .....), suggerirei, quando ha senso, utilizzare i campi standard correnti che possono essere usati con putExtra (), cioè Intent.EXTRA_something.

Un elenco completo può essere trovato in Intent (sviluppatori Android).


//  How to send value using intent from one class to another class
//  class A(which will send data)
    Intent theIntent = new Intent(this, B.class);
    theIntent.putExtra("name", john);
    startActivity(theIntent);
//  How to get these values in another class
//  Class B
    Intent i= getIntent();
    i.getStringExtra("name");
//  if you log here i than you will get the value of i i.e. john




android-intent