[英]How to receive click event in activity from a recycler-view adapter
於14.11.2018編輯:
我想簡化我的問題,如何從Fragment中獲得一個click事件,該Fragment中包含一個recycler-view,它具有一個處理click事件的適配器?
我正在使用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;
}
}
伙計們,我想請您告訴我一些可能的解決方案,因為我沒有找到任何有用的東西,我是一個新手,所以也許缺少一些基本知識。 如果您需要更多詳細信息,請告訴我,我將在此處發布。
您是否還在ManualModeActivity上綁定和取消綁定服務? 關於重寫onStop方法的另一件事,首先編寫重寫的代碼比先調用父函數更好。 @Override protected void onStop(){unbindService(mServiceConnection); BLEServiceBonded =假; super.onStop(); Log.d(TAG,“ onStop:BLE服務已解除綁定” + mServiceConnection); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.