Как заставить MainPage.xaml.cs общаться с MainActivity.cs, используя интерфейс - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь сделать так, чтобы эти классы совместно использовали некоторые данные, я прочитал, что правильный способ сделать это - через интерфейс, но MainPage.xaml.cs не распознает «ссылку».Что мне нужно добавить в MainPage.xaml.cs, чтобы он работал?

Class1.cs:

namespace interfaceWebnav
{
    public interface IPortableInterface
    {
        object Test();
    }
}

MediaService.cs

using interfaceWebnav;

namespace ComprarMusicas
{
    public class MediaService : Java.Lang.Object, IPortableInterface
    {
        public object Test()
        {
            //do something
        }
    }
}

MainActivity.cs:

...
...
using interfaceWebnav;

[assembly: Dependency(typeof(IPortableInterface))]
namespace MyApp.Droid
{
     [Activity(Label = "Comprar Músicas", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, NoHistory = true,ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity :  global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            ............
            base.OnCreate(savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
        }
   }

    public override void OnBackPressed()
    {
        // here I need to know what SomeMethod() from MainPage.xaml.cs is saying
    }

}

MainPage.xaml.cs (я прокомментировал некоторые из моих попыток заставить его работать):

using Xamarin.Forms;
// using interfaceWebnav;

// [assembly: Dependency(typeof(IPortableInterface))]

namespace MyApp
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }
    }

    void SomeMethod(object sender, EventArgs e)
    {
        object resultado = DependencyService.Get<IPortableInterface>().Test();
    }
}

В MainPage.xaml.cs Visual Studio говорит о SomeMethod: «Пространство имен не может содержать элементы в виде полей или методов напрямую».

О «Get IPortableInterface» говорится:

«Не удается найти имя типа или пространства имен IPortableInterface (вам не хватает директивы using или ссылки на сборку?) "

1 Ответ

0 голосов
/ 11 сентября 2018

Add Class говорит, что MediaService.cs в вашем Android-проекте наследует его от IPortableInterface

public class MediaService : Java.Lang.Object, IPortableInterface
{
    public void Test()
    {
        // your android platform specific implementation
    }

}

В файле MainPage.cs ваш вызывающий сервис зависимостей

namespace MyApp
{
    public partial class MainPage : ContentPage
    {
        public bool foo = true; //just an example

        public MainPage()
        {
            InitializeComponent();
        }
    }
    //I suppose invoking any event lets says button click calling interface dependency service of android project
    void Button_Clicked(object sender,EventArgs e)
    {
        object resultado = DependencyService.Get<IPortableInterface>().Test();
    }

}

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

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