Xamarin Toast 消息错误 (C#)
Xamarin Toast Message error (C#)
我想显示吐司消息。如果我在 onCreate() 中执行此操作,它会工作正常。但我想这样做,但出现错误:
Java.Lang.NullPointerException: Attempt to invoke virtual method
'android.content.res.Resources android.content.Context.getResources()'
on a null object reference
我该怎么办?
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
的实例。
不要使用 MainActivity
的自定义实例在 Click
中显示您的 toast 消息,而是简化您的代码以使用现有的 activity 参考片段:
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
的实例。
参见:
如果我理解正确你的问题,我认为一个好的解决方案可能是这个:
public void makeToast(Context ctx, string str)
{
Toast.MakeText(ctx, str, ToastLength.Long).Show();
}
当你在每个片段中使用它时,你可以调用它只是写:
makeToast(this.Activity, "test!");
对我有用,让我知道:)
我想显示吐司消息。如果我在 onCreate() 中执行此操作,它会工作正常。但我想这样做,但出现错误:
Java.Lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
我该怎么办?
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
的实例。
不要使用 MainActivity
的自定义实例在 Click
中显示您的 toast 消息,而是简化您的代码以使用现有的 activity 参考片段:
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
的实例。
参见:
如果我理解正确你的问题,我认为一个好的解决方案可能是这个:
public void makeToast(Context ctx, string str)
{
Toast.MakeText(ctx, str, ToastLength.Long).Show();
}
当你在每个片段中使用它时,你可以调用它只是写:
makeToast(this.Activity, "test!");
对我有用,让我知道:)