Подтвердить что ты не робот

Android, могу ли я использовать putExtra для передачи нескольких значений

Я хочу передать два значения другому действию, могу ли я сделать это с помощью putExtra или мне нужно сделать это более сложным способом, который, как мне кажется, из моего чтения. Например, может быть что-то вроде этой работы?

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);

Вышеприведенная ошибка.

Edit

Первое, что я пробовал, было похоже на:

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

но ID_EXTRA2, похоже, пишет над ID_EXTRA1

Итак,

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

Похоже на выход, но как извлечь значения из массива во втором действии, я использовал это для одного значения.

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

Думаю, мне нужно как-то превратить ID_EXTRA в массив???

4b9b3361

Ответ 1

Вы можете передать несколько значений с помощью нескольких клавиш. Вместо

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

do

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

Конечно, вам нужно определить 2 константы для ключей и прочитать их отдельно в новом действии.

Или вы можете передать массив строк через

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

Ответ 2

Если вам нравится, вы можете передать "комплект" дополнительных, а не отдельных дополнений, например: -

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);

Затем в вашей деятельности, что ваш запуск, вы можете ссылаться на них следующим образом: -

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

Или (если хотите): -

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

Надеюсь, это поможет!: -)

Ответ 3

Ввод дополнительных значений в класс

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);

    }

Чтение дополнительных значений из другого класса

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);   

Ответ 4

Нет, вы не можете, но можете передать массив, используя:

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

как это, например:

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

Ответ 5

Ваш пример не будет работать, так как Extras сделаны из Key и Value. Вы не можете добавить несколько Keys и Values в один Extra

Кроме того, ваши ключи должны быть Strings, насколько я знаю (и заметил), но я могу ошибаться в этом.

Попробуйте следующее:

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);

Ответ 6

Для одного небольшого значения putExtra идеально, но когда вы передаете несколько значений и вам нужно передать пользовательские ArrayList или List, то я думаю, что это плохая идея. Решение - вы можете использовать Parcelable. Вы также можете использовать Singleton или Serializable.

Исправлено:

Parcelable класс, который вам нужно предоставить.

 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();
     }
 }

Создайте свою активность, в которой вы хотите отправить

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

От другого действия, в котором вы хотите получить

MyParcelable example = Parcels.unwrap(getIntent().getParcelableExtra("example"));