C# 如何从另一个类获取变量到OnPrepare/createoptions菜单
我有一个简单的wifi应用程序。它只是扫描WIFI并列出它们。我发现我的ScanResult列表正在填充另一个方法,但在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
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;
}