我将代码从本机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);
我从github复制的Java原始代码
请帮我转换。对不起,我的英语不好 )
发生第一个错误是因为与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);
});
第二个和第三个错误是简单的拼写错误。
的Xamarin当量removeMessages
,sendMessageDelayed
,obtainMessage
只是RemoveMessages
,SendMessageDelayed
,ObtainMessage
,下面的PascalCase
方法命名约定由微软C#编码风格指南概述。所有Xamarin基类库和Java库的生成绑定都遵循此约定。
我还建议您将字段名称从更改为,mSomeField
以someField
遵循MS C#编码样式指南。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句