Как получить событие клика в действии от адаптера просмотра вида - PullRequest
0 голосов
/ 13 ноября 2018

отредактировано 14.11.2018:

Я хотел бы упростить свой вопрос, как я могу получить событие щелчка в действии от фрагмента, который содержит представление переработчика и имеет адаптер, который обрабатывает событие щелчка?

Приложение выглядит следующим образом: enter image description here


Я работаю над приложением, которое использует службу BLE (на примере Google BLE). У меня есть DeviceScanActivity , который успешно может выполнять поиск и подключается к периферии BLE, это действие запускает новое действие, DeviceControlActivity , и я привязываю к нему службу BLE:

@Override
protected void onStart() {
    super.onStart();
    Log.d(TAG, "onStart: bind Service. " + mServiceConnection);
    Intent gattServiceIntent = new Intent(this, BluetoothLeService.class);
    bindService(gattServiceIntent, mServiceConnection, BIND_AUTO_CREATE);
}

В этом упражнении я могу отправлять значения / сообщения на периферию BLE.

У моего приложения есть другое действие, ManualModeActivity . Когда я запускаю это действие, я сначала отменяю привязку службы BLE в случае DeviceControlActivity :

@Override
protected void onStop() {
    super.onStop();
    Log.d(TAG, "onStop: BLE Service is unbind " + mServiceConnection);
    unbindService(mServiceConnection);
    BLEServiceBonded = false;
}

Затем во вновь запущенном действии ( ManualModeActivity ) я привязываю к нему службу BLE, как это делается в случае DeviceControlActivity .

И теперь начинается проблема, или, по сути, я новичок в программировании Android, и я не знаю, что мне делать дальше, чтобы использовать службу BLE в ManualModeActivity , я ищу два дня, ничего полезное найдено.

Итак, давайте посмотрим, что я не могу сделать или что создает для меня вызов.

ManualModeActivity имеет ViewPage с двумя вкладками, я создал ManualTabPagerAdapter , который расширяет FragmentStatePagerAdapter, в этом адаптере я загружаю фрагменты, например, ManualDeviceFrament . Этот фрагмент имеет RecyclerView, у каждого элемента в RecyclerView есть кнопка для обработки списка и нажатий кнопок. Я создал ManualListAdapter . И теперь проблема, если я нажимаю на кнопку, я хочу отправить сообщение BLE, но служба BLE, mBluetoothLeService, является нулевой. Я хочу использовать следующую команду для отправки сообщения:

mBluetoothLeService.writeCustomCharacteristic("Hello");

В случае обеих операций у меня есть следующий код для обработки служебного соединения:

    private final ServiceConnection mServiceConnection = new ServiceConnection() {

    @Override
    public void onServiceConnected(ComponentName componentName, IBinder service) {
        mBluetoothLeService = ((BluetoothLeService.LocalBinder) service).getService();
        if (!mBluetoothLeService.initialize()) {
            Log.e(TAG, "Unable to initialize Bluetooth");
            finish();
        }
        mBluetoothLeService.connect(mDeviceAddress);
        BLEServiceBonded = true;
    }
    @Override
    public void onServiceDisconnected(ComponentName componentName) {
        BLEServiceBonded = false;
    }
}

Итак, ребята, я хотел бы попросить вас рассказать мне о некоторых возможных решениях, потому что я не нашел ничего полезного, я новичок, поэтому, возможно, некоторые базовые знания отсутствуют. Если вам нужна дополнительная информация, просто дайте мне знать, и я опубликую это здесь.

1 Ответ

0 голосов
/ 14 ноября 2018

Вы также связывали и отменяли привязку сервиса в ManualModeActivity? и еще одна вещь при переопределении метода onStop, лучше сначала написать переопределенный код, чем сначала вызывать родительскую функцию. @Override protected void onStop () { unbindService (mServiceConnection); BLEServiceBonded = false; super.onStop (); Log.d (TAG, «onStop: служба BLE отменяется» + mServiceConnection); }

...