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 в массив???
Ответы
Ответ 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"));