2012-06-13 31 views
0

我知道onCreateOptionsMenu只在活動中調用過一次,但可以在onOptionsItemSelected上設置網絡檢查嗎?從Android的選項菜單進行網絡檢查

我已經嘗試使用ConnectivityManager網絡檢查時選擇一個項目,但它始終返回true ...我不確定是否設置onCreateOptionsMenu時調用,然後鎖定在網絡狀態。

這裏是我的代碼:

public void refreshCheck(){ 

try 
{ 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    if(cm == null) 
     isAvailable = false; 
    else 
     isAvailable = cm.getActiveNetworkInfo().isAvailable(); 
} 
catch(Exception e){} 

if(isAvailable == true) 
{ 

    listDataPopulate();  

} 
else 
{ 
    Toast refresherror = Toast.makeText(this, "Connection interrupted. Unable to refresh.", duration); 
    refresherror.show();  
}  

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu){ 

MenuInflater menuInflater = getMenuInflater(); 
menuInflater.inflate(R.menu.news_menu, menu); 
return true; 

} 

@Override 
public boolean onOptionsItemSelected(MenuItem item){ 

switch(item.getItemId()) 
{ 
case R.id.aboutMenuItem: 
AlertDialog.Builder alert=new AlertDialog.Builder(this); 
alert.setTitle("About App").setMessage("About this app....").setNeutralButton("OK", null).show(); 
break; 
case R.id.refreshNewsMenuItem: 

    refreshCheck(); 

break; 
default: 
} 
{ 

} 
return super.onOptionsItemSelected(item); 
} 
+0

爲什麼不在onCreate中進行檢查? – Guardanis

+0

代碼看起來很好,只要在該外部函數中聲明瞭cm,它*就不應該設置在onCreateOptionsMenu中。然而,當你調用onCreateOptionsMenu時,即使網絡斷開連接,你是否確定它返回true? – matt5784

+0

@Cruceo我知道onCreate只會被調用一次,所以如果他們成功加載這個rss feed,它會一直說它在線。我想在嘗試刷新Feed之前檢查它們是否仍處於聯機狀態。事實上,它會使應用程序崩潰,因爲如果我離線,它仍會嘗試獲取數據。 –

回答

1

把你的邏輯檢查(和反應,你發現了什麼)的onPrepareOptionsMenu(),而不是內部。

每次打開選項菜單時都會調用該方法,而不是僅在第一次。這樣,每次用戶打開選項時,都會檢查它是否有連接,因此應顯示刷新選項。