преобразовать Java.Lang.Object в тип .net - PullRequest
1 голос
/ 02 сентября 2011

Я пытаюсь разыграть спиннер. Выбранный предмет для струнного монодроида.Поскольку SelectedItem является Java.Lang.Object, мне нужно знать, как я могу привести Java.Lang.Object к собственному типу .net.Спасибо, Алекс

Ответы [ 3 ]

5 голосов
/ 02 сентября 2011

Вы не предоставили никакого контекста для того, что вы привязываете к счетчику, но я предполагаю, что это просто список строк? Если это так, одна из возможностей - просто набрать

spinner.SelectedItem.ToString()

Это не будет очень полезно, если базовый объект не является строкой. У вас есть и другие доступные варианты. Вы можете использовать spinner.SelectedItemPosition, чтобы получить элемент из источника адаптера счетчика. Что-то вроде:

var source = new List<string> { "a", "b", "c" };
spinner.Adapter = new ArrayAdapter<string>(this, Resource.Layout.Item, Resource.Id.Name, source);
var selectedString = source[spinner.SelectedItemPosition];

Вы также можете сделать:

var selectedString = spinner.GetItemAtPosition[spinner.SelectedItemPosition].ToString();

Все зависит от того, что вы пытаетесь сделать и когда. У Xamarin есть учебник здесь , в котором рассматриваются основы использования блесны.

0 голосов
/ 25 октября 2016

У меня похожая проблема;особенно потому, что у меня есть DataLayer PCL, которым я хочу поделиться между различными платформами.И я не хочу каждый раз преобразовывать свои объекты DataLayer в объект Java или объект IOS и т. Д. *

Итак, для решения Android этот шаблон Wrapper / Decorator отлично работал;

  1. Представьте, что у вас есть объект PCL

    public class GoldList
    {
        public string UniqueId { get; set; }
        public string Name { get; set; }
        public string Owner { get; set; }
    
        public GoldList()
        {
        }
    }
    
  2. Создание интерфейса IJavaWrapper и объекта JavaWrapper, который наследуется от Java.Lang.Object:

    public abstract class JavaWrapper<T> : Java.Lang.Object, IJavaWrapper
    {
        private readonly T _item;
    
        protected JavaWrapper(T item)
        {
            _item = item;
        }
    
        public T Item
        {
            get { return _item; }
        }
    
        object IJavaWrapper.Item
        {
            get { return _item; }
        }
    }
    
    public interface IJavaWrapper
    {
        object Item { get; }
    }
    
  3. Создать конкретный экземпляр этого;упаковка вашего объекта данных

    class GoldListJO : JavaWrapper<GoldList>
    {
        public GoldListJO() : this(new GoldList())
        {
        }
    
        public GoldListJO(GoldList item) : base(item)
        {
        }
    }
    
  4. Привязка к элементам (используя пример кода):

    List<GoldListJO> items = new List<GoldListJO>();
    items.Add(new GoldListJO(new GoldList { Name = "1", UniqueId = "U1", Owner = "O1" }));
    items.Add(new GoldListJO(new GoldList { Name = "2", UniqueId = "U2", Owner = "O2" }));
    items.Add(new GoldListJO(new GoldList { Name = "3", UniqueId = "U3", Owner = "O3" }));
    list.SetAdapter(new GoldListAdapter(items));
    
  5. Когда вы вызываете «GetItem»и он возвращает Java.Lang.Object, нет проблем, просто обратитесь к .Item:

    GoldListJO item = (GoldListJO)GetItem(position);
    
    vh.txtName.Text = item.Item.Name;
    vh.txtUniqueId.Text = Java.Lang.String.Format("UniqueId: %s", item.Item.UniqueId);
    vh.txtOwner.Text = Java.Lang.String.Format("Owner: %s", item.Item.Owner);
    
0 голосов
/ 11 мая 2012

http://docs.xamarin.com/android/advanced_topics/architecture

Это ссылка на документацию Xaramin для архитектуры среды выполнения Mono, которая не дает прямого ответа на проблему «приведения» java к .net, она, безусловно, является отправной точкой (и являетсягде я стою в поиске и создании решения).

Я выложу что-нибудь полезное, если / когда я что-нибудь придумаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...