2017-06-21 28 views
1

这是我第一次接触Xamarin Forms,所以可能(也可能是)我以错误的方式做事。访问MainActivity中的MainPage.xaml按钮

我有下面的XAML代码:

<ContentPage.Content> 
    <StackLayout VerticalOptions="FillAndExpand" 
       HorizontalOptions="FillAndExpand" 
       Orientation="Vertical" 
       Spacing="15" x:Name="stackLayout"> 

     <Button x:Name="giveFeedback" Text="Start Recording" Clicked="OnStartRecording" /> 
     <Button x:Name="stopRecording" Text="Stop Recording" IsEnabled="false" Clicked="OnStopRecording" /> 

     <Label Text="Feedback:" /> 
     <Editor x:Name="feedbackTranscription" VerticalOptions="FillAndExpand" > 
     </Editor> 

     <Button x:Name="saveFeedback" IsEnabled="false" Text="Save feedback" Clicked="OnSave" /> 

    </StackLayout> 
</ContentPage.Content> 

我想访问设备的麦克风捕获音频。经过一番研究,我发现了Android的MediaRecorder类。问题是,我无法弄清楚如何从MainActivity类的MainPage.xaml访问元素。

MainActivity.cs

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 
    { 
     MediaRecorder _recorder; 
     Button _start; 
     Button _stop; 

     string path = "/sdcard/test.3gpp"; 

     protected override void OnCreate(Bundle bundle) 
     { 
      TabLayoutResource = Resource.Layout.Tabbar; 
      ToolbarResource = Resource.Layout.Toolbar; 

      //_start.Click += delegate { 
      // _stop.Enabled = !_stop.Enabled; 
      // _start.Enabled = !_start.Enabled; 

      // _recorder.SetAudioSource(AudioSource.Mic); 
      // _recorder.SetOutputFormat(OutputFormat.ThreeGpp); 
      // _recorder.SetAudioEncoder(AudioEncoder.AmrNb); 
      // _recorder.SetOutputFile(path); 
      // _recorder.Prepare(); 
      // _recorder.Start(); 
      //}; 

      //_stop.Click += delegate { 
      // _stop.Enabled = !_stop.Enabled; 

      // _recorder.Stop(); 
      // _recorder.Reset(); 
      //}; 

      base.OnCreate(bundle); 

      global::Xamarin.Forms.Forms.Init(this, bundle); 
      LoadApplication(new App()); 
     } 

的情况下,我想结合GiveFeedback在和stopRecording到_start和MainActivity类别的_stop按钮。我举了一个FindById<Button>(Resource.Id.start)的例子。我应该为我的按钮设置ID,并执行相同的操作吗?我应该使用MVVM吗? PS:现在,我只想学习Android的Xamarin表单。

+0

如果您使用MVVM – Krishna

回答

1

在PCL创建这样的接口

public interface PortableInterface 
    { 
     object GetLogicFromAndroidProject(); 
    } 

添加扩展这个接口在你的Android项目类似下面

using System; 
using Xamarin.Forms; 
[assembly: Dependency(typeof(PortableInterfaceRenderer))] 
namespace YourProjectName.iOS 
{ 

    public class PortableInterfaceRenderer : PortableInterface 
    { 
     public object GetLogicFromAndroidProject() 
     { 
      throw new NotImplementedException(); // here write your logic 
     } 
    } 
} 

现在你必须调用PCL项目这种方法

var obj = DependencyService.Get<PortableInterface>().GetLogicFromAndroidProject(); 

希望这会有所帮助

+0

,您应该使用DependencyService并调用方法在xaml.cs或viewmodel中启动或停止记录吗?是否需要在任何位置注册依赖项,或者是否通过反射自动执行? –

+0

我已经添加了代码。 [assembly:Dependency(typeof(PortableInterfaceRenderer))]这是注册码。然后它会自动调用。 – VenkyDhana

+0

我的不好,我使用Startup.cs或引导类。谢谢 –