gpt4 book ai didi

c# - 在 MainActivity 中访问 MainPage.xaml 按钮

转载 作者:行者123 更新时间:2023-11-30 00:29:41 25 4
gpt4 key购买 nike

这是我第一次接触 Xamarin Forms,所以我可能(而且很可能)以错误的方式做事。

我有以下 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 访问元素。

主 Activity .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 绑定(bind)到 MainActivity 类的 _start 和 _stop 按钮。我有一个 FindById<Button>(Resource.Id.start) 的例子.我应该为我的按钮设置 id 并做同样的事情吗?我应该使用 MVVM 吗?

PS:目前,我只想学习 Xamarin Forms with Android。

最佳答案

在PCL中创建这样的界面

    public interface PortableInterface
{
object GetLogicFromAndroidProject();
}

像下面这样在你的android项目中添加扩展这个接口(interface)

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();

希望对你有帮助

关于c# - 在 MainActivity 中访问 MainPage.xaml 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44670683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com