Путаница в передаче сообщений о намерениях

#java #android #android-intent #message

#java #Android #android-intent #Сообщение

Вопрос:

Я немного запутался с намерением и передачей сообщений в Android. В основном, мое текущее затруднительное положение:

Пользователю отображается экран со списком животных, когда пользователь нажимает на строку, например, Тигра, информация об этом животном будет отображаться на следующем экране / действии.

Я в значительной степени позаботился о фреймворке приложения, поэтому, когда пользователь выбирает из списка animal, он попадает в Animal activity / class, но на данном этапе это всего лишь общий макет.

Как я могу сообщить приложению, что был выбран TIGER, и показать данные tiger пользователю.Мой подход до сих пор

Пользователь нажимает элемент в списке, и вызывается действие:

 protected void onListItemClick(ListView l, View v, int position, long id){
    Intent animalIntent = new Intent(this, Animal.class);
    startActivity(animalIntent);
}
  

Ответ №1:

В дополнение к @PhilLello, как только вы используете Intent.setExtra(), вы можете получить значение в своем activity с помощью:

 string animal;
Bundle extras = this.getIntent().getExtras();
if (extras != null) {
    animal = extras.getString("animal");
}
  

Комментарии:

1. Спасибо!! На самом деле у меня есть еще один вопрос, как точно я могу определить, на какую строку нажал пользователь. Я имею в виду, я не буду знать, что они нажали Tiger, возможно, они нажали parrot. Делается ли это с помощью onListItemClick (int position)? Это означало бы, что я использую статический список, что так и есть, мне просто интересно, может ли быть лучший подход

2. На самом деле вы бы использовали последний аргумент: длинный идентификатор для ссылки на выбранный идентификатор строки.

Ответ №2:

Вы можете добавить данные в свой intent, поэтому перед вызовом startActivity вы можете сделать:

 animalIntent.putExtra("myApp.chosenAnimal","Tiger");
  

Вы можете использовать другие типы данных вместо приведенной выше строки Tiger, целое число, представляющее идентификатор animals, объект Tiger и т.д.

Теперь в вашем примере класс «Animal» должен был бы быть activity , то есть activity, который загружается после обработки intent . Если Animal — это просто POJO, вам может понадобиться новое действие, чтобы показать ваше конкретное животное.

Оказавшись внутри Animal activity, вы можете проверить содержимое переданных намерений с помощью:

 Intent incomingIntent = getIntent();
String selectedAnimal = incomingIntent.getStringExtra("myApp.chosenAnimal");
  

обратите внимание, что «MyApp.chosenAnimal» в области входящих намерений совпадает с таковым в animalIntent.

Ответ №3:

Вы можете использовать Intent.setExtra(«животное», «ТИГР») перед запуском намерения.

Надеюсь, это поможет,

Фил Лелло

Ответ №4:

Я задавал этот вопрос раньше и обнаружил, что для меня работает следующее. В activity, которому вы хотите отправить данные, укажите следующее.

 Intent i = new Intent();
i.putExtra(KEY,String);
i.putExtra(KEY2,String);
  

Когда вы хотите получить эту информацию, выполните следующее.

 Bundle extras = getIntent().getExtras();
String temp = extras.getString(KEY);
String temp2 = extras.getString(KEY2);
  

Надеюсь, это поможет