#java #android #activity #android_intent
Есть активити1, которое передает в активити2 для счетчика количество миллисекунд.
Количество миллисекунд может быть разным (в зависимости от того, какая кнопка нажата
на активити1).Счетчик в активити2 должен принимать эти значение миллисекунд.
В активити1 код для передачи данных такой:
int SEKOND;
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_dif
SEKOND = 5000;
Intent intent = new Intent(this,Activity2.class);
intent.putExtra("sekondDif",SEKOND);
startActivity(intent);
break;
case R.id.button_is:
SEKOND = 50000;
Intent intent1 = new Intent(this,Activity2.class);
intent1.putExtra("sekondIs",SEKOND);
startActivity(intent1);
break;
}
}
В ативити2 код получения интентов такой:
Bundle extras = getIntent().getExtras();
int id0 = extras.getInt("sekondDif");
int id1 = extras.getInt("sekondIs");
Т.е. число передано и извлечено.
Далее есть счетчик, вместо id которого нужно поставить либо данные из id0 либо из
id1, в зависимости от того, какой интент был получен:
new CountDownTimer(id, 1000) {}
Сама логика такая: на активити1 есть разные button. Если кликнуть по button1, то
при переходе на активити2 в счетчике должно быть выставлено одно количество миллисекунд,
если кликнуть на активтити1 по button2, то в счетчике должно быть выставлено другое
количество миллисекунд.
Помогите, пожалуйста, связать эти условия (секунды счетчика на втором активити и
выбор кнопки на первом активити ).
Ответы
Ответ 1
Если ваша проблема в том, что вы не знаете во второй активити какое именно значение было передано из первой, то вы можете, при вытаскивании данных из интента указывать значение по умолчанию для отсутствующих данных и проверяя ваши переменные второй активити на предмет равенства значения по умолчанию вызывать метод нужный передавая туда нужную переменную. Bundle extras = getIntent().getExtras(); //зададим -1 как значение по умолчанию. //им будет инициализированна переменная, если в Bundle нет искомого ключа. //если этот аргумент не указать и значения по ключу нет, то присвоится 0 int id0 = extras.getInt("sekondDif", -1); int id1 = extras.getInt("sekondIs", -1); if(id0 != -1) { //значит получено "sekondDif" } else if(id1 != -1) { //значит получено "sekondIs" } Также можно проверять есть ли определённый ключ в Bundle методом contains(String key)Ответ 2
С точки зрения логики работы программы ваш подход в решении этой задачи логически неверен. В решении именно вашей задачи вообще не требуется слать какие то разные интенты и что то там потом определять какой из них какой: int second; @Override public void onClick(View v) { Intent intent = new Intent(this,Activity2.class); switch (v.getId()){ case R.id.button_dif second = 5000; break; case R.id.button_is: second = 50000; break; } intent.putExtra("sekond",second); startActivity(intent); } Activity2: Bundle extras = getIntent().getExtras(); int second = extras.getInt("second"); new CountDownTimer(second, 1000) {}; Что касается решения для вопроса в общем случае, то правильно не слать разные значения одним из интентов и потом пытаться определить, в каком же он отправлен, а одним интентом слать значение, другим - признак (ключ) о типе переданного значения: int second; final int DIF = 1; final int IS = 2; @Override public void onClick(View v) { Intent intent = new Intent(this,Activity2.class); switch (v.getId()){ case R.id.button_dif second = 5000; intent.putExtra("key",DIF); break; case R.id.button_is: second = 50000; intent.putExtra("key",IS); break; } intent.putExtra("sekond",second); startActivity(intent); } Activity2: final int DIF = 1; final int IS = 2; Bundle extras = getIntent().getExtras(); int key = extras.getInt("key"); int second = extras.getInt("second"); switch (key){ case DIF: difMethod(second); // действия при переданном значении dif break; case IS: isMethod(second); // действия при переданном значении is break; } Вы можете сделать отдельный класс констант и хранить их все там, а не инициализировать в каждом активити Замечания - по конвенции разработчика Android ЗАГЛАВНЫМИ буквами в "змеином стиле" пишутся имена констант. Имена переменных пишутся в lowerCamelCase-стиле - имя начинается с маленькой буквы, Отдельные слова в имени пишутся без пробелов с большой буквы. Этой конвенции рекомендуется придерживаться всем разработчикам.
Комментариев нет:
Отправить комментарий