передача данных из одного действия в другое в 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"));

это лучше, чем использовать статическую ссылку на мой взгляд.