C# 如何从另一个类获取变量到OnPrepare/createoptions菜单

C# 如何从另一个类获取变量到OnPrepare/createoptions菜单,c#,android,xamarin,C#,Android,Xamarin,我有一个简单的wifi应用程序。它只是扫描WIFI并列出它们。我发现我的ScanResult列表正在填充另一个方法,但在OnPrepare/CreateOptions菜单中,它始终为空 这个方法在程序启动时首先调用,我知道这一点,但当我尝试使用InvalidateOptionsMenu()再次调用它时没有任何变化。以下是我的piec代码: 主要活动: public class MainActivity : Activity { public static Context context

我有一个简单的wifi应用程序。它只是扫描WIFI并列出它们。我发现我的ScanResult列表正在填充另一个方法,但在OnPrepare/CreateOptions菜单中,它始终为空

这个方法在程序启动时首先调用,我知道这一点,但当我尝试使用
InvalidateOptionsMenu()再次调用它时没有任何变化。以下是我的piec代码:

主要活动:

public class MainActivity : Activity
{

    public static Context context;
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);


        SetContentView(Resource.Layout.Main);
        Button wifiButton = FindViewById<Button>(Resource.Id.popupButton);


        RegisterReceiver(new WiFiReceiver(), new IntentFilter(WifiManager.ScanResultsAvailableAction));
        ((WifiManager)GetSystemService(WifiService)).StartScan();

        wifiButton.Click += (s, arg) => {
            InvalidateOptionsMenu();
            PopupMenu menu = new PopupMenu(this, wifiButton);
            menu.Inflate(Resource.Menu.menu);
            menu.Show();

        };

    }

    public override bool OnCreateOptionsMenu(IMenu menu) {
        WiFiReceiver wifiReceiver = new WiFiReceiver();
        IList<ScanResult> availableWifis = wifiReceiver.GetWifiList();//This is always null

        if (availableWifis != null) {
            foreach (ScanResult token in availableWifis) {
                menu.Add(token.Ssid);
            }
        }


        return base.OnCreateOptionsMenu(menu);
    }
}
公共类main活动:活动
{
公共静态语境;
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
按钮wifiButton=findviewbyd(Resource.Id.popubutton);
RegisterReceiver(new WiFiReceiver(),new IntentFilter(WifiManager.ScanResultsAvailableAction));
((WifiManager)GetSystemService(WifiService)).StartScan();
wifiButton.单击+=(s,arg)=>{
无效操作菜单();
PopupMenu=新的PopupMenu(此为wifiButton);
菜单.充气(资源.菜单.菜单);
menu.Show();
};
}
公共覆盖布尔onCreateOptions菜单(IMenu菜单){
WiFiReceiver WiFiReceiver=新的WiFiReceiver();
IList availableWifis=wifiReceiver.GetWifiList();//此值始终为空
如果(availableWifis!=null){
foreach(AvailableWiFi中的扫描结果令牌){
menu.Add(token.Ssid);
}
}
返回base.onCreateOptions菜单(菜单);
}
}
WiFi扫描本课程:

class WiFiReceiver : BroadcastReceiver {

    private IList<ScanResult> wifiList;
    private string message;

    public override async void OnReceive(Context context, Intent intent) {
        MainActivity mainActivity = (MainActivity)context;


        WifiManager wifiManager = (WifiManager)mainActivity.GetSystemService(Context.WifiService);
        this.message = string.Join("\r\n", wifiManager.ScanResults
            .Select(r => $"{r.Ssid} - {r.Level} dB"));
        this.wifiList = wifiManager.ScanResults.ToList(); //This has connection informations
        mainActivity.DisplayText(message);
        await Task.Delay(TimeSpan.FromSeconds(1));
        wifiManager.StartScan();
    }

    public IList<ScanResult> GetWifiList() {
        return wifiList;
    }
class-WiFiReceiver:BroadcastReceiver{
私人保险公司;
私有字符串消息;
公共重写异步void OnReceive(上下文、意图){
MainActivity MainActivity=(MainActivity)上下文;
WifiManager WifiManager=(WifiManager)mainActivity.GetSystemService(Context.WifiService);
this.message=string.Join(“\r\n”,wifiManager.ScanResults
.Select(r=>$“{r.Ssid}-{r.Level}dB”);
this.wifiList=wifiManager.ScanResults.ToList();//这有连接信息
mainActivity.DisplayText(消息);
等待任务延迟(时间跨度从秒(1));
wifiManager.StartScan();
}
公共IList GetWifiList(){
返回wifiList;
}