簡體   English   中英

如何從Recycler-View適配器接收活動中的點擊事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM