メニュー項目のvisibility
属性をonReceive
android Broadcast class
の方法が、私はそれが同じ方法で使用して別のintent
のために働く場合でも、上記title error
を得続ける:java.lang.NullPointerException:ヌルオブジェクトリファレンスでインターフェイスメソッド 'android.view.MenuItem android.view.Menu.findItem(int)'を呼び出そうとしました
マイBroadcast class
コード:
/**
* Use this to catch the intent sent from the JobSchedulerService class
*/
public BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public IBinder peekService(Context myContext, Intent service) {
return super.peekService(myContext, service);
}
@Override
public void onReceive(Context context, Intent intent) {
//TODO: Remove
Toast.makeText(context, "Intent detected", Toast.LENGTH_SHORT).show();
if (intent.getAction().equals(MY_INTENT)) {
//TODO: Remove
Toast.makeText(context, "MY_INTENT", Toast.LENGTH_SHORT).show();
MenuItem refreshMenuItem = menu.findItem(R.id.menu_refresh);
refreshMenuItem.setVisible(true);
getLoaderManager().restartLoader(CRYPTOCURRENCY_LOADER_ID, null, HomeActivity.this);
}
if (intent.getAction().equals(CONNECTION_INTENT)) {
status = NetworkUtil.getConnectivityStatusString(context);
//TODO: Remove
Toast.makeText(context, "CONNECT_INTENT", Toast.LENGTH_SHORT).show();
MenuItem netMenuItem = menu.findItem(R.id.menu_network_available);
MenuItem nonetMenuItem = menu.findItem(R.id.menu_network_absent);
// Check and notify user of network status
if (Objects.equals(status, "Wifi enabled") || Objects.equals(status, "Mobile data enabled")) {
netMenuItem.setVisible(true);
nonetMenuItem.setVisible(false);
} else {
netMenuItem.setVisible(false);
nonetMenuItem.setVisible(true);
}
}
}
};
NetworkUtil.getConnectivityStatusString(context)
コード:
public class NetworkUtil {
public static int TYPE_WIFI = 1;
public static int TYPE_MOBILE = 2;
public static int TYPE_NOT_CONNECTED = 0;
public static int getConnectivityStatus(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (null != activeNetwork) {
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
return TYPE_WIFI;
if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
return TYPE_MOBILE;
}
return TYPE_NOT_CONNECTED;
}
public static String getConnectivityStatusString(Context context) {
int conn = NetworkUtil.getConnectivityStatus(context);
String status = null;
if (conn == NetworkUtil.TYPE_WIFI) {
status = "Wifi enabled";
} else if (conn == NetworkUtil.TYPE_MOBILE) {
status = "Mobile data enabled";
} else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
status = "Not connected to Internet";
}
return status;
}
}
onCreateMenuOption
方法:
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
//inflate the menu options from the menu xml file
//This add menu items to the app bar
getMenuInflater().inflate(R.menu.network_available, menu);
this.menu = menu;
if (menu != null) {
if (isConnected()) {
// Let user know the status of the device network
menu.findItem(R.id.menu_network_available).setVisible(true);
menu.findItem(R.id.menu_network_absent).setVisible(false);
} else {
// Let user know the status of the device network
menu.findItem(R.id.menu_network_available).setVisible(false);
menu.findItem(R.id.menu_network_absent).setVisible(true);
}
}
return true;
}
menu xml
ファイル:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item
android:id="@+id/menu_refresh"
android:icon="@drawable/progress"
android:title="data Refresh"
android:visible="false"
app:showAsAction="always" />
<item
android:id="@+id/menu_network_available"
android:title="@string/network_avalable"
android:visible="false"
app:showAsAction="always" />
<item
android:id="@+id/menu_network_absent"
android:title="@string/network_absent"
android:visible="true"
app:showAsAction="ifRoom" />
</menu>
私はので、私はそれを実装してみましょうし、それは素晴らしいが素敵演じ –
を果たしているかを確認 '最高practice'の使用の私の欠如を許し、答えてくれてありがとう下さいアンドロイドを学んでいます –