2011-12-09 13 views
35

Chcę przekazać dwie wartości do innej czynności mogę to zrobić z putExtra lub muszę to zrobić w bardziej skomplikowany sposób, który wydaje mi się z mojego czytania. E.g .. czy coś takiego może zadziałać?Android, Czy mogę użyć putExtra do przekazywania wielu wartości

public final static String ID_EXTRA="com.fnesse.beachguide._ID"; 

Intent i = new Intent(this, CoastList.class); 
i.putExtra(ID_EXTRA, "1", "111"); 
startActivity(i); 

Powyższe daje błąd.

Edit

Pierwszą rzeczą próbowałem była podobna do:

i.putExtra(ID_EXTRA1, "1"); 
i.putExtra(ID_EXTRA2, "111"); 

ale ID_EXTRA2 wydaje się pisać na ID_EXTRA1

So,

i.putExtra(ID_EXTRA, new String[] { "1", "111"}); 

Wygląda na to, idź, ale jak wyodrębnić wartości z tablicy w drugim działaniu używam tego dla pojedynczej wartości.

passedVar = getIntent().getStringExtra(CoastList.ID_EXTRA); 

Chyba muszę zmienić ID_EXTRA w tablicę jakoś?

Odpowiedz

21

Można przekazywać wiele wartości za pomocą wielu klawiszy. Zamiast

i.putExtra(ID_EXTRA, "1", "111"); 

zrobić

i.putExtra(ID_EXTRA1, "1"); 
i.putExtra(ID_EXTRA2, "111"); 

oczywiście trzeba zdefiniować 2 stałe dla kluczy i trzeba czytać zarówno osobno w nowej działalności.

Albo można przekazać tablicę ciągów za pośrednictwem

i.putExtra(ID_EXTRA, new String[] { "1", "111"}); 
+0

I dokonałem edycji powyżej, dziękuję. –

+4

@MikeClarke Upewnij się, że ID_EXTRA1 i ID_EXTRA2 nie mają przypisanych tych samych wartości * (np. Oba mają 'com.fnesse.beachguide._ID') *. W przeciwnym razie liczą się jako ten sam klucz, który spowodowałby nadpisanie. A jeśli spróbujesz użyć tablicy, użyj 'getIntent(). GetStringArrayExtra()' zamiast 'getIntent(). GetStringExtra()'. –

+0

Dzięki, działa już teraz! –

1

No nie można, ale można przekazać tablicę używając:

public Intent putExtra (String name, String[] value) 

tak na przykład:

i.putExtra(ID_EXTRA, new String[]{"1", "111"}); 
1

Twój przykład nie zadziała, ponieważ Extras są wykonane z Key i Value. You cant umieścić wielokrotność Keys i Values w jednym Extra

Również klucze muszą być Strings o ile wiem (i zauważyłem), ale może się mylę w tej jednej.

Spróbuj tego:

public final static String ID_EXTRA="com.fnesse.beachguide._ID"; 

Intent i = new Intent(this, CoastList.class); 
i.putExtra("ID_Extra", ID_EXTRA); 
i.putExtra("1", 111); 
startActivity(i); 
112

Można by zdać „pakiet” dodatków zamiast poszczególnych dodatków, jeśli chcesz, na przykład: -

Intent intent = new Intent(this, MyActivity.class); 
Bundle extras = new Bundle(); 
extras.putString("EXTRA_USERNAME","my_username"); 
extras.putString("EXTRA_PASSWORD","my_password"); 
intent.putExtras(extras); 
startActivity(intent); 

Następnie w swojej działalności, która swój wyzwalającego, możesz odwoływać się do nich tak: -

Intent intent = getIntent(); 
Bundle extras = intent.getExtras(); 
String username_string = extras.getString("EXTRA_USERNAME"); 
String password_string = extras.getString("EXTRA_PASSWORD"); 

Lub (jeśli wolisz): -

Bundle extras = getIntent().getExtras(); 
String username_string = extras.getString("EXTRA_USERNAME"); 
String password_string = extras.getString("EXTRA_PASSWORD"); 

Mam nadzieję, że to pomoże! :-)

8

Umieszczenie dodatkowych wartości w klasie

public class MainActivity extends Activity { 
     public final static String USERNAME = "com.example.myfirstapp.MESSAGE"; 
     public final static String EMAIL = "com.example.myfirstapp.EMAIL"; 

public void registerUser(View view) { 
     Intent intent = new Intent(this, DisplayMessageActivity.class); 
     EditText userNameTxt = (EditText) findViewById(R.id.editText1); 
     EditText emailTxt = (EditText) findViewById(R.id.editText2); 
     String userName = userNameTxt.getText().toString(); 
     String email = emailTxt.getText().toString(); 
     intent.putExtra(USERNAME, userName); 
     intent.putExtra(EMAIL,email); 
     startActivity(intent); 

    } 

Odczyt dodatkowych wartości z innej klasy

public class DisplayMessageActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Intent intent = getIntent(); 
     String user = intent.getStringExtra(MainActivity.USERNAME); 
     String email = intent.getStringExtra(MainActivity.EMAIL); 
0

Dla pojedynczej małej ilości wartości putExtra jest doskonała, ale kiedy przechodzą wiele wartości i trzeba przekazać niestandardową ArrayList lub List, wtedy myślę, że to zły pomysł. Rozwiązanie możesz użyć: Parcelable. Ty i także używasz Singleton lub lub też.

Parcelable:

Parcelable klasa którym trzeba się dzielić.

public class MyParcelable implements Parcelable { 
    private int mData; 

    public int describeContents() { 
     return 0; 
    } 

    public void writeToParcel(Parcel out, int flags) { 
     out.writeInt(mData); 
    } 

    public static final Parcelable.Creator<MyParcelable> CREATOR 
      = new Parcelable.Creator<MyParcelable>() { 
     public MyParcelable createFromParcel(Parcel in) { 
      return new MyParcelable(in); 
     } 

     public MyParcelable[] newArray(int size) { 
      return new MyParcelable[size]; 
     } 
    }; 

    private MyParcelable(Parcel in) { 
     mData = in.readInt(); 
    } 
} 

Postac swoją aktywność w którym chcesz wysłać

MyParcelable example = new MyParcelable(); 
..... 
..... 
Bundle bundle = new Bundle(); 
bundle.putParcelable("example", Parcels.wrap(example)); 

Z innej działalności, w którym chcesz otrzymywać

MyParcelable example = Parcels.unwrap(getIntent().getParcelableExtra("example")); 
Powiązane problemy