如何从Recycler-View适配器接收活动中的点击事件

时间:2018-11-12 21:50:53

标签: android android-fragments bluetooth-lowenergy recycler-adapter android-service-binding

于2018年11月14日编辑:

我想简化我的问题,如何从Fragment中获得一个click事件,该Fragment包含一个recycler-view,它具有一个处理click事件的适配器?

应用程序看起来如下: 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 。 当我开始此活动时,如果出现 DeviceControlActivity

,我首先取消BLE服务的绑定:
@Override
protected void onStop() {
    super.onStop();
    Log.d(TAG, "onStop: BLE Service is unbind " + mServiceConnection);
    unbindService(mServiceConnection);
    BLEServiceBonded = false;
}

然后在新启动的活动( ManualModeActivity )中,将BLE服务绑定到它,就像在 DeviceControlActivity 的情况下一样。

现在开始出现问题,或者基本上我是android编程的新手,我不知道接下来该怎么做才能在 ManualModeActivity 中使用BLE服务,我已经搜索了两天,找不到有用的东西。

所以,让我看看我无能为力,或者是什么使我面临挑战。

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 :(得分:-1)

您是否也在ManualModeActivity上绑定并取消了绑定服务? 关于重写onStop方法的另一件事,首先编写重写的代码比先调用父函数更好。     @Override     受保护的void onStop(){         unbindService(mServiceConnection);         BLEServiceBonded =假;         super.onStop();         Log.d(TAG,“ onStop:BLE服务已解除绑定” + mServiceConnection);     }