Android, можно ли использовать putExtra для передачи нескольких значений - PullRequest
44 голосов
/ 10 декабря 2011

Я хочу передать два значения другому занятию, могу ли я сделать это с помощью 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);

Выше выдает ошибку.

Редактировать

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

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 в массив ???

Ответы [ 6 ]

137 голосов
/ 24 апреля 2012

Вы можете передать «связку» дополнений, а не отдельные дополнения, если вам нравится, например: -

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

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

23 голосов
/ 10 декабря 2011

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

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"});
11 голосов
/ 19 октября 2014

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

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);   
1 голос
/ 10 декабря 2011

Ваш пример не будет работать, так как 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);
1 голос
/ 10 декабря 2011

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

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

, например, например:

i.putExtra(ID_EXTRA, new String[]{"1", "111"});
0 голосов
/ 08 мая 2017

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

Parcelable:

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

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

Из другого действия, где вы хотите получить

MyParcelable example = Parcels.unwrap(getIntent().getParcelableExtra("example"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...