gpt4 book ai didi

android - 将 Android Java 代码转换为 Xamarin C#

转载 作者:太空狗 更新时间:2023-10-29 13:12:24 25 4
gpt4 key购买 nike

我在将代码从 native Android JAVA 代码转换为 Xamarin C# Android 代码时遇到问题

我有一个类可以帮助我延迟开始自定义 AutoComleteTextView 搜索:

public class DelayAutoCompleteTextView : AutoCompleteTextView
{
public static Context _Context {get; set;}
private static Android.Util.IAttributeSet _Attrs { get; set; }

public DelayAutoCompleteTextView(Context context, Android.Util.IAttributeSet attrs) : base(context, attrs)
{
_Context = context;
_Attrs = attrs;
}

private static int MESSAGE_TEXT_CHANGED = 100;
private static int DEFAULT_AUTOCOMPLETE_DELAY = 750;

private int mAutoCompleteDelay = DEFAULT_AUTOCOMPLETE_DELAY;
private ProgressBar mLoadingIndicator;

public class mHandler : Handler
{
public override void HandleMessage(Message msg)
{
DelayAutoCompleteTextView.base.PerformFiltering((Java.Lang.ICharSequence)msg.Obj, msg.Arg1);
}
}

public void setLoadingIndicator(ProgressBar progressBar)
{
mLoadingIndicator = progressBar;
}

public void setAutoCompleteDelay(int autoCompleteDelay)
{
mAutoCompleteDelay = autoCompleteDelay;
}

protected override void PerformFiltering(Java.Lang.ICharSequence text, int keyCode)
{
if (mLoadingIndicator != null)
{
mLoadingIndicator.Visibility = ViewStates.Visible;
}

mHandler.removeMessages(MESSAGE_TEXT_CHANGED);
mHandler.sendMessageDelayed(mHandler.obtainMessage(MESSAGE_TEXT_CHANGED, text), mAutoCompleteDelay);
}

public override void OnFilterComplete(int count)
{
if (mLoadingIndicator != null)
{
mLoadingIndicator.Visibility = ViewStates.Gone;
}

base.OnFilterComplete(count);
}}

但是有3条错误信息:

  • 1) DelayAutoCompleteTextView.base.PerformFiltering((Java.Lang.ICharSequence)msg.Obj, msg.Arg1);

  • 2) mHandler.removeMessages(MESSAGE_TEXT_CHANGED);

  • 3) mHandler.sendMessageDelayed(mHandler.obtainMessage(MESSAGE_TEXT_CHANGED, text), mAutoCompleteDelay);

Java I 上的原始代码 copied from github

请帮我转换。抱歉我的英语不好)

最佳答案

第一个错误的发生是因为与 Java 不同,C# 中的嵌套类无法访问父类的 this。指针,因为它们是一个单独的实体。

而不是制作 mHandler一个类,我建议你把它变成一个变量并使用 Handler(Action<Message>)创建 Handler 的构造函数可以访问 DelayAutoCompleteTextView 的成员.

private readonly Handler mHandler = new Handler(delegate (Message msg) {
base.PerformFiltering((Java.Lang.ICharSequence)msg.Obj, msg.Arg1);
});

第二个和第三个错误是简单的拼写错误。

removeMessages 的 Xamarin 等效项, sendMessageDelayed , obtainMessage只是RemoveMessages , SendMessageDelayed , ObtainMessage , 在 PascalCase 之后Microsoft C# 编码风格指南概述的方法命名约定。 所有 Xamarin 基类库和为 Java 库生成的绑定(bind)都遵循此约定。

我还建议您将字段名称从 mSomeField 更改为至 someField遵循 MS C# 编码风格指南。

关于android - 将 Android Java 代码转换为 Xamarin C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38576999/

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