问题描述
我想显示一个吐司消息.如果我在 onCreate() 中执行此操作,它会正常工作.但我想这样做,但出现错误:
I want to display a toast Message. If I'd do this in onCreate() it'd work fine. But I want to do it like this and I get an error:
Java.Lang.NullPointerException:尝试调用虚方法'android.content.res.Resources android.content.Context.getResources()'在空对象引用上
我该怎么办?
public void textToast(string textToDisplay) {
Toast.MakeText(this,
textToDisplay, ToastLength.Long).Show();
}
class SampleTabFragment : Fragment
{
Button add;
MainActivity main = new MainActivity();
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
var view = inflater.Inflate(Resource.Layout.Tab, container, false);
add = view.FindViewById<Button>(Resource.Id.add);
add.Click += Click;
return view;
}
void Click(object sender, EventArgs eventArgs)
{
main.textToast( "I like Toast!");
}
}
推荐答案
Java.Lang.NullPointerException
被触发,因为您正在手动创建和使用 MainActivity
的实例.
The Java.Lang.NullPointerException
is triggered because you are manually creating and using an instance of MainActivity
.
不要使用 MainActivity
的自定义实例在 Click
中显示您的 Toast 消息,而是简化您的代码以使用现有活动引用的片段:
Instead of using a custom instance of MainActivity
to display your toast message in Click
, simplify your code to use the fragments existing activity reference:
public void textToast(string textToDisplay) {
Toast.MakeText(this,
textToDisplay, ToastLength.Long).Show();
}
class SampleTabFragment : Fragment
{
Button add;
// Remove manual creation code
// MainActivity main = new MainActivity();
// ...
void Click(object sender, EventArgs eventArgs)
{
(Activity as MainActivity).textToast( "I like Toast!");
}
}
此代码假定拥有的 Activity 始终是 MainActivity
的实例.
This code assumes that the owning activity is always an instance of MainActivity
.
见:
这篇关于Xamarin Toast 消息错误 (C#)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!