Xamarin Android解析中的ActionCall不工作
我有一个适配器,其中有来自视图的行,每一行都包含一些信息。我正在尝试拨打Actioncall,因此,如果有人单击带有电话号码的行,它就会开始拨号。这是可行的,但问题是我没有从文本视图中获取电话号码,而是获取一个随机号码 这是代码 当用户点击电话号码时的功能Xamarin Android解析中的ActionCall不工作,android,parsing,xamarin,textview,Android,Parsing,Xamarin,Textview,我有一个适配器,其中有来自视图的行,每一行都包含一些信息。我正在尝试拨打Actioncall,因此,如果有人单击带有电话号码的行,它就会开始拨号。这是可行的,但问题是我没有从文本视图中获取电话号码,而是获取一个随机号码 这是代码 当用户点击电话号码时的功能 private void TelSelected(TextView obj) { mTelefonNumar = FindViewById<TextView>(Resource.Id.t
private void TelSelected(TextView obj)
{
mTelefonNumar = FindViewById<TextView>(Resource.Id.textView3);
Toast.MakeText(this, mTelefonNumar.ToString(), ToastLength.Long).Show();
string stringtelefon = mTelefonNumar.ToString();
var uri = Android.Net.Uri.Parse("tel:" + stringtelefon);
var intent = new Intent(Intent.ActionCall, uri);
StartActivity(intent);
}
private void TelSelected(TextView obj)
{
mTelefonNumar=findviewbyd(Resource.Id.textView3);
MakeText(this,mTelefonNumar.ToString(),ToastLength.Long).Show();
字符串stringtelefon=mTelefonNumar.ToString();
var uri=Android.Net.uri.Parse(“电话:”+stringtelefon);
var intent=新的intent(intent.ActionCall,uri);
星触觉(意向);
}
Toast返回这个android.widget.TextView{2e4a768b V.ED..C……0198-698264#7f0b0055 app:id/textView3}
而Intent.ActionCall则拨打这个号码247680,但这个号码是另一个/
public override View GetView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
if (row == null)
{
row = LayoutInflater.From(mContext).Inflate(mLayout, parent, false);
}
row.FindViewById<TextView>(Resource.Id.textView3).Text = Linfo[position].TelClient;
row.FindViewById<TextView>(Resource.Id.textView3).Click += InformatiiListAdapter_Click;
return row;
}
void InformatiiListAdapter_Click(object sender, EventArgs e)
{
//He clicked on the Telephone Number
mNrApasat.Invoke((TextView)sender);
}
public override View GetView(int位置、视图转换视图、视图组父视图)
{
视图行=转换视图;
if(行==null)
{
行=布局更平坦。从(mContext)。充气(mLayout,父项,false);
}
row.findviewbyd(Resource.Id.textView3).Text=Linfo[position].TelClient;
row.FindViewById(Resource.Id.textView3).Click+=InformatiiListAdapter\u Click;
返回行;
}
void InformatiiListAdapter\u单击(对象发送者,事件参数e)
{
//他按了一下电话号码
mNrApasat.Invoke((TextView)发送方);
}
。文本视图上的ToString()将显示有关该视图的信息,而不是显示的文本。以下几点可以解决这个问题:
((TextView)sender).Text;
而不是
((TextView)sender).ToString();
一种更简洁的方法(因为显示的文本可能并不总是一个可用的电话号码)是将号码存储在行“tag”属性中(您可以在其中存储任何内容)。
并在行上设置事件
public override View GetView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
if (row == null)
{
row = LayoutInflater.From(mContext).Inflate(mLayout, parent, false);
}
row.SetTag(Linfo[position].TelClient);
row.Click += InformatiiListAdapter_Click;
row.FindViewById<TextView>(Resource.Id.textView3).Text = (string)row.GetTag();
return row;
}
void InformatiiListAdapter_Click(object row, EventArgs e)
{
//He clicked on the Telephone Number
string phoneNumber = (string)(((View)row).GetTag());
// do stuff with the phone number
}
public override View GetView(int位置、视图转换视图、视图组父视图)
{
视图行=转换视图;
if(行==null)
{
行=布局更平坦。从(mContext)。充气(mLayout,父项,false);
}
row.SetTag(Linfo[position].TelClient);
行.Click+=信息列表选项卡单击;
row.findviewbyd(Resource.Id.textView3).Text=(string)row.GetTag();
返回行;
}
void InformatiiListAdapter\u单击(对象行,事件参数e)
{
//他按了一下电话号码
字符串phoneNumber=(字符串)((视图)行.GetTag());
//用电话号码做些事情
}
另外,另一方面,FindViewByID在处理方面非常昂贵,避免做得太多,您可能希望查看ViewHolder模式,这将使滚动更加平滑
另外,最好在列表本身上设置项click listener,而不是在每个convertView上注册事件。我在尝试您的行mNrApasat.Invoke(((TextView)sender.Text)时出错;-委托“System.Action”具有一些无效参数。mNrApasat的类型是行动是的,你从来没说过mNrApasat是什么。但是您可能不再需要它了,((View)row).GetTag()是电话号码字符串的一个字符串,所以您只需将它传递给另一个方法来执行电话或其他操作