Xamarin Toast消息错误(C#)

3
我想显示一个toast消息,如果我在onCreate()中这样做,它会正常工作。但是我想像这样做,然后我收到了一个错误信息:

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!"); 
    }
}

我会查看的是,尝试显示在其上的吐司消息的“this”或“this”内的视图是否为空,在您尝试显示吐司消息的上下文中。 - ClintL
1
我建议直接使用创建Fragment的Activity。您可以在onAttach()方法中使用getActivity()来确保它是正确的引用。 - Jon Douglas
2个回答

6
Java.Lang.NullPointerException 是由于您手动创建并使用 MainActivity 实例所触发的。
为了避免在 Click 中使用自定义的 MainActivity 实例来显示 toast 消息,简化您的代码,使用现有碎片活动的引用即可。
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!"); 
    }
}

这段代码假设所属的活动始终是MainActivity的实例。

参见:


1
如果我正确理解了您的问题,我认为一个好的解决方案可能是这样的:
        public void makeToast(Context ctx, string str)
        {
            Toast.MakeText(ctx, str, ToastLength.Long).Show();
        }

当您在每个片段中使用它时,只需编写以下内容即可调用:

makeToast(this.Activity, "test!");

适用于我,告诉我 :)


谢谢,这个也可以,但我会使用matthewrdev的解决方案,因为如果我要制作更多的提示消息,我需要输入更少的代码。 - AlGrande
@AlGrande,我只是想提供一个不同的解决方案,谢谢您的评论 :) - Benedetto Del Greco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接