如何从另一个类获取变量到OnPrepare / CreateOptionsMenu

时间:2016-07-22 09:19:26

标签: c# android xamarin

我有一个简单的wifi应用程序。它只是扫描wifis并列出它们。我发现我的ScanResult List正在填写另一种方法,但在OnPrepare / CreateOptionsMenu中它总是为空。

此方法在程序启动时首先调用我知道,但是当我尝试再次使用InvalidateOptionsMenu();调用它时,没有任何更改。这是我的代码:

MainActivity:

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

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;
    }

0 个答案:

没有答案