2017-06-21 171 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或引導類。謝謝 –