передача данных из одного действия в другое в Xamarin.Андроид
Я хотел передать Class Object
от одного действия к другому в Xamarin.Android
app.
Я могу передать простые строки, используя Intent.PutExtra
метод.
кто-нибудь знает об этом. anyhelp ценится :)
2 ответов
концепция такая же, как и со стандартным (не-Xamarin) приложением.
можно использовать Intent#putExtra(String, Parcelable)
, чтобы передать любой объект, который реализует Parcelable
интерфейс в качестве дополнительного.
на Parcelable
интерфейс немного сложный, поэтому обязательно прочитайте документацию, чтобы убедиться, что ваш класс соответствует требованиям. Вы также можете проверить это так вопрос для получения дополнительной информации о создании Parcelable
класс.
вы не можете передать ссылку на объект через Intent
. Это связано с тем, что деятельность предназначена для работы совершенно независимо друг от друга. Пользователи могут выбрасывать вашу активность в фоновом режиме при выполнении других задач, поэтому вполне возможно (и очень вероятно), что переменные вашей активности будут собраны в мусор. Когда пользователь позже вернется к вашей деятельности, он сможет воссоздать ее состояние.
Если вам действительно нужно передать ссылку на объект напрямую, вы можете сделать это, сделав этот объект статической переменной. Хотя это быстрый и грязный способ решить проблему получения данных от одного действия к другому, он не решает проблему переменной, потенциально являющейся мусором, собранным в какой-то момент, и, как правило, является плохим выбором дизайна.
просто добавляю на случай, если кто-то еще столкнется с этим. Хорошая вещь о Xamarin / .NET - это то, как легко использовать JSON. Вы можете сериализовать свои данные в строку и передать ее через дополнительные функции.
JSON.NET
- хорошая библиотека (которую вы можете найти в хранилище компонентов Xamarin) для этого, а также некоторые встроенные классы JSON .Сеть. Пример использования JSON.NET будет вот так.
Intent i = new Intent(Application.Context, typeof(SecondActivity));
i.PutExtra("key", JsonConvert.SerializeObject(myObject));
StartActivity(i);
и другие Activity
вы можете десериализовать он.
var obj = JsonConvert.DeserializeObject<OBJ_TYPE>(Intent.GetStringExtra("key"));
это лучше, чем использовать статическую ссылку на мой взгляд.