Итак, у меня есть строка в activity2
String message = String.format(
"Current Location \n Longitude: %1$s \n Latitude: %2$s", lat, lng);
Я хочу вставить эту строку в текстовое поле в activity1. Как я могу это сделать? Заранее благодарю вас.
Итак, у меня есть строка в activity2
String message = String.format(
"Current Location \n Longitude: %1$s \n Latitude: %2$s", lat, lng);
Я хочу вставить эту строку в текстовое поле в activity1. Как я могу это сделать? Заранее благодарю вас.
Вы можете использовать намерения, которые представляют собой сообщения, отправленные между действиями. В намерении вы можете поместить все виды данных, String, int и т.д.
В вашем случае в activity2
перед тем, как перейти в activity1
, вы сохраните сообщение String следующим образом:
Intent intent = new Intent(activity2.this, activity1.class);
intent.putExtra("message", message);
startActivity(intent);
В activity1
, в onCreate()
вы можете получить сообщение String
, извлекая Bundle
(который содержит все сообщения, отправленные вызывающей активностью), и вызовите getString()
на нем:
Bundle bundle = getIntent().getExtras();
String message = bundle.getString("message");
Затем вы можете установить текст в TextView
:
TextView txtView = (TextView) findViewById(R.id.your_resource_textview);
txtView.setText(message);
Надеюсь, это поможет!
Вы можете отправлять данные из одной активности в другую с помощью Intent
Intent sendStuff = new Intent(this, TargetActivity.class);
sendStuff.putExtra(key, stringvalue);
startActivity(sendStuff);
Затем вы можете получить эту информацию во втором действии, получив намерение и извлекая лишнюю строку. Сделайте это в своем методе onCreate()
.
Intent startingIntent = getIntent();
String whatYouSent = startingIntent.getStringExtra(key, value);
Тогда все, что вам нужно сделать, это вызвать setText на TextView
и использовать эту строку.
Скажем, что EditText et1 в ur MainActivity и вы хотите передать это SecondActivity
String s=et1.getText().toString();
Bundle basket= new Bundle();
basket.putString("abc", s);
Intent a=new Intent(MainActivity.this,SecondActivity.class);
a.putExtras(basket);
startActivity(a);
теперь во второй активности, скажем, вы хотите, чтобы строка передавалась из EditText et1 в TextView txt1 из SecondActivity
Bundle gt=getIntent().getExtras();
str=gt.getString("abc");
txt1.setText(str);
Intent intent = new Intent(activity1.this, activity2.class);
intent.putExtra("message", message);
startActivity(intent);
В activity2 в onCreate() вы можете получить сообщение String, извлекая Bundle (который содержит все сообщения, отправленные вызывающей активностью), и вызовите getString() на нем:
Bundle bundle = getIntent().getExtras();
String message = bundle.getString("message");
Возможны две ситуации, когда мы говорим о передаче данных между действиями.
Допустим, есть два действия A и B, и есть строка X. и вы находитесь в действии A.
Теперь два случая
1) A-> B
2) A <-B
Случай 1): строка X находится в A, и вы хотите получить ее в действии B.
Это очень просто.
В Деятельности А.
1) Создать намерение
2) Положите дополнительные значения
3) startActivity
Intent i = new Intent(A.this, B.class);
i.putExtra("Your_KEY",X);
startActivity(i)
В Деятельности B
Внутри метода onCreate получить строку X, используя ключ, который вы использовали при сохранении X (Your_KEY).
Intent i = getIntent();
String s = i.getStringExtra("Your_KEY");
Дело 2)
Этот случай немного сложнее, если вы новичок в разработке Android.
Поскольку вы находитесь в действии A, вы переходите к действию B, собираете строку, возвращаетесь к действию A и извлекаете собранную строку или данные. Давайте посмотрим, как бороться с этой ситуацией.
В Деятельности А
1) Создать намерение
2) начать деятельность с кодом запроса.
Intent i = new Intent(A.this, B.class);
startActivityForResult(i,your_req_code);
В Деятельности B
1) Поместите строку X в намерение
2) Установить результат
3) Завершить деятельность
Intent returnIntent = new Intent();
returnIntent .putString("KEY",X);
setResult(resCode,returnIntent); // for the first argument, you could set Activity.RESULT_OK or your custom rescode too
finish();
Снова в упражнении А
1) Переопределить метод onActivityResult
onActicvityResult(int req_code, int res_code, Intent data)
{
if(req_code==your_req_code)
{
String X = data.getStringExtra("KEY")
}
}
Вы можете спросить, что такое reqCode, resCode в onActicvityResult(int reqCode, resCode, Intent data)
reqCode полезен, когда вам нужно определить, от какой деятельности вы получаете результат.
Допустим, у вас есть две кнопки, одна кнопка запускает камеру (вы щелкаете фотографию и в результате получаете растровое изображение этого изображения в вашей активности), другая кнопка запускает GoogleMap (в результате вы получаете текущие координаты вашего местоположения). Таким образом, чтобы различать результаты обеих операций, вы запускаете CameraActivty и MapActivity с разными кодами запросов.
resCode: полезно, когда нужно различать, как результаты возвращаются к запрашиваемой активности.
Например: вы запускаете Camera Activity. Когда начинается действие камеры, вы можете сделать снимок или просто вернуться к запросу активности, не делая снимок, нажав кнопку "Назад". Таким образом, в этих двух ситуациях ваша камера отправляет результат с разными resCode ACTIVITY.RESULT_OK и ACTIVITY.RESULT_CANCEL соответственно.
Соответствующие ссылки
Намерения полезны для передачи данных вокруг рамки Android. Вы можете общаться со своими собственными Activities
и даже другими процессами. Проверьте руководство разработчика и, если у вас есть конкретные вопросы (это много для переваривания), вернитесь.
Вы можете использовать GNLauncher, который является частью библиотеки утилиты, которую я написал в тех случаях, когда требуется много взаимодействия с Activity. В библиотеке это почти так же просто, как вызов функции объекта Activity с требуемыми параметрами. https://github.com/noxiouswinter/gnlib_android/wiki#gnlauncher
Чтобы вставить текст из Activity2 в Activity1, сначала необходимо создать функцию visit в Activity2.
public void visitactivity1()
{
Intent i = new Intent(this, activity1.class);
i.putExtra("key", message);
startActivity(i);
}
После создания этой функции вы должны вызвать ее из своей функции onCreate() Activity2:
visitactivity1();
Затем перейдите к файлу Java активности. В своей функции onCreate() создайте объект Bundle, выберите предыдущее сообщение через свой ключ через этот объект и сохраните его в строке.
Bundle b = getIntent().getExtras();
String message = b.getString("key", ""); // the blank String in the second parameter is the default value of this variable. In case the value from previous activity fails to be obtained, the app won't crash: instead, it'll go with the default value of an empty string
Теперь поместите этот элемент в TextView или EditText или любой элемент макета, который вы предпочитаете использовать функцию setText().