繁体   English   中英

Xamarin Toast消息错误(C#)

[英]Xamarin Toast Message error (C#)

我想显示一个Toast Message。 如果我在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!"); 
    }
}

由于您手动创建和使用MainActivity实例, Java.Lang.NullPointerException会触发Java.Lang.NullPointerException

而不是使用MainActivity的自定义实例在Click显示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的实例。

看到:

如果我理解你的问题,我认为一个好的解决方案可能是这个:

        public void makeToast(Context ctx, string str)
        {
            Toast.MakeText(ctx, str, ToastLength.Long).Show();
        }

当你在每个片段中使用它时,你可以称之为:

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

适合我,让我知道:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM