MainActivityクラスにあるボタンを、
他クラスから有効・無効を設定できるように、
以下のようにstaticなオブジェクトに設定し、
public class MainActivity extends AppCompatActivity { public static Button entButton; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); entButton = (Button) findViewById(R.id.buttonENT); } }
Alt Beacon LibraryというBluetoothのBeaconを受信するLibraryを使用して、
受信しているBeacon数を取得するモジュール内で、
Beaconを受信したときは、ButtonをEnableに、
受信できないときは、ButtonをDisableにするような処理を書きました。
public class RangingActivity extends Activity implements BeaconConsumer { ・・・ @Override public void onBeaconServiceConnect() { RangeNotifier rangeNotifier = new RangeNotifier() { @Override public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { if (beacons.size() > 0) { MainActivity.entButton.setEnabled(true); }else{ MainActivity.entButton.setEnabled(false); } } } } ・・・
すると、起動時はBeaconの状態に応じてEnable/Disableは正常に動作するのですが、
Beacon状態が変化したとき(Enable→Disable もしくは Disable→Enable)に、
アプリがCrashして落ちます。
不思議なのは、Android StudioのVersionを4.2に上げる前までは正常に動いていました。
そこでVer.4.2をUninstallして、古いVer4.1.1をインストールしてみたのですが、
それでも正常動作しませんでした。
さらに、RangingActivityクラスに2つのボタンを追加し、
それぞれのボタンを押したときに、
MainActivity.entButton.setEnabled(true);とMainActivity.entButton.setEnabled(false);
を実行するようにしたところ、
ボタンのクリックにより、MainActivityクラスのボタンの
有効・無効を正常に切り替えることが出来ました。
もう、わけがわかりません(@_@?)
ボタンに割り当てた時との違いは、RangingActivityの画面が、
一番前に来ているかどうかなので、それが原因なのかとも思ったのですが、
確証が得られません。
他クラスから、別クラスのボタンObjectにアクセスする方法が間違っているのか、
Beacon Libraryが、新しいバージョンのAndroid Studioに対応しなくなったのかの
切り分けができずに困っています。
どうかお知恵をお貸しください。
あなたの回答
tips
プレビュー