Android 在片段中使用BLE函数而不是MainActivity

Android 在片段中使用BLE函数而不是MainActivity,android,kotlin,Android,Kotlin,我正在尝试构建一个应用程序,它可以扫描其中一个片段中的BLE设备。我正在使用viewpager在选项卡之间移动。在其中一个片段中,我想使用BLE扫描函数。然而,由于属于Fragment的类,我不能使用代码所需的一些函数。有人能告诉我怎么解决吗。如何使用片段中的代码并在viewpager中调用它。还有一个刷新按钮,可以刷新列表 class Bluetooth : Fragment() { override fun onCreateView( inflate

我正在尝试构建一个应用程序,它可以扫描其中一个片段中的BLE设备。我正在使用viewpager在选项卡之间移动。在其中一个片段中,我想使用BLE扫描函数。然而,由于属于Fragment的类,我不能使用代码所需的一些函数。有人能告诉我怎么解决吗。如何使用片段中的代码并在viewpager中调用它。还有一个刷新按钮,可以刷新列表

class Bluetooth : Fragment() {

        override fun onCreateView(
            inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            return inflater.inflate(R.layout.fragment_bluetooth, container, false)
        }

        private fun isLocationPermissionEnabled(): Boolean {
            return ContextCompat.checkSelfPermission(**this**, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
        }

        private val bleScanner = object : ScanCallback() {
            override fun onScanResult(callbackType: Int, result: ScanResult?) {
                super.onScanResult(callbackType, result)
                Log.d("DeviceListActivity", "onScanResult: ${result?.device?.address} - ${result?.device?.name}")
            }

            override fun onBatchScanResults(results: MutableList<ScanResult>?) {
                super.onBatchScanResults(results)
                Log.d("DeviceListActivity", "onBatchScanResults:${results.toString()}")
            }

            override fun onScanFailed(errorCode: Int) {
                super.onScanFailed(errorCode)
                Log.d("DeviceListActivity", "onScanFailed: $errorCode")
            }

        }

        private val bluetoothLeScanner: BluetoothLeScanner
            get() {
                val bluetoothManager = **applicationContext**.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
                val bluetoothAdapter = bluetoothManager.adapter
                return bluetoothAdapter.bluetoothLeScanner
            }

        class ListDevicesAdapter(context: Context, resource: Int) : ArrayAdapter<String>(context, resource)

        override fun onCreate(savedInstanceState: Bundle?) {
            Log.d("DeviceListActivity", "onCreate()")
            super.onCreate(savedInstanceState)
            **setContentView**(R.layout.fragment_bluetooth)
        }

        override fun onStart() {
            Log.d("DeviceListActivity", "onStart()")
            super.onStart()

            bluetoothLeScanner.startScan(bleScanner)

        }

        override fun onStop() {
            bluetoothLeScanner.stopScan(bleScanner)
            super.onStop()
        }
    }
class蓝牙:片段(){
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看{
返回充气机。充气(R.layout.fragment\u蓝牙,容器,错误)
}
private fun isLocationPermissionEnabled():布尔值{
return ContextCompat.checkSelfPermission(**this**,Manifest.permission.ACCESS\u rough\u LOCATION)==PackageManager.permission\u provided
}
private val bleScanner=对象:ScanCallback(){
覆盖扫描结果(回调类型:Int,结果:ScanResult?){
super.onScanResult(回调类型、结果)
Log.d(“DeviceListActivity”,“onScanResult:${result?.device?.address}-${result?.device?.name}”)
}
覆盖BatchScanResults(结果:可变列表?){
super.onBatchScanResults(结果)
Log.d(“DeviceListActivity”,“onBatchScanResults:${results.toString()}”)
}
覆盖失败(错误代码:Int){
super.onscan失败(错误代码)
Log.d(“DeviceListActivity”,“onScanFailed:$errorCode”)
}
}
私人val bluetoothLeScanner:bluetoothLeScanner
得到(){
val bluetoothManager=**applicationContext**.getSystemService(Context.BLUETOOTH_服务)作为bluetoothManager
val bluetoothAdapter=bluetoothManager.adapter
返回bluetoothAdapter.bluetoothLeScanner
}
类ListDeviceAdapter(上下文:上下文,资源:Int):ArrayAdapter(上下文,资源)
重写创建时的乐趣(savedInstanceState:Bundle?){
Log.d(“DeviceListActivity”,“onCreate()”)
super.onCreate(savedInstanceState)
**setContentView**(R.layout.fragment\u蓝牙)
}
覆盖有趣的onStart(){
Log.d(“DeviceListActivity”,“onStart()”)
super.onStart()
bluetoothLeScanner.startScan(bleScanner)
}
覆盖桌面上的乐趣(){
bluetoothLeScanner.stopScan(bleScanner)
super.onStop()
}
}
我得到的错误是(this…)、setcontentview和(applicationcontext…),并在这里的代码中以粗体格式标记

这是我的主要活动:

class MainActivity : AppCompatActivity() {


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val adapter = MyViewPagerAdapter(supportFragmentManager)
    adapter.addFragment(Bluetooth(), "Devices")
    adapter.addFragment(Information(), "Information")
    adapter.addFragment(Log(), "Log")
    viewpager.adapter = adapter
    tabs.setupWithViewPager(viewpager)
    refresh.setOnClickListener { Bluetooth() }

}


class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager) {

    private val fragmentlist: MutableList<Fragment> = ArrayList()
    private val titlelist: MutableList<String> = ArrayList()

    override fun getItem(position: Int): Fragment {
        return fragmentlist[position]
    }

    override fun getCount(): Int {
        return fragmentlist.size
    }

    override fun getPageTitle(position: Int): CharSequence? {
        return titlelist[position]
    }

    fun addFragment(fragment: Fragment, title: String) {
        fragmentlist.add(fragment)
        titlelist.add(title)
    }
}
class MainActivity:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val适配器=MyViewPagerAdapter(supportFragmentManager)
adapter.addFragment(蓝牙(),“设备”)
adapter.addFragment(Information(),“Information”)
adapter.addFragment(Log(),“Log”)
viewpager.adapter=适配器
选项卡.使用viewpager进行设置(viewpager)
refresh.setOnClickListener{Bluetooth()}
}
类MyViewPagerAdapter(管理器:FragmentManager):FragmentPagerAdapter(管理器){
private val fragmentlist:MutableList=ArrayList()
private val titlelist:MutableList=ArrayList()
覆盖趣味getItem(位置:Int):片段{
返回碎片列表[位置]
}
重写fun getCount():Int{
返回fragmentlist.size
}
覆盖有趣的getPageTitle(位置:Int):字符序列{
返回标题列表[位置]
}
FunAddFragment(片段:片段,标题:字符串){
碎片列表。添加(碎片)
标题列表。添加(标题)
}
}
1。 您可以在片段中直接使用活动上下文引用

因此,使用
getActivity()
ot
getContext()
方法,而不是使用thisapplicationContext

二,。
删除创建时的
setContentView()
,因为您已经在
onCreateView()

中正确地膨胀了视图,而且,您的错误与此无关。您的帖子具有误导性。这不是StackOverflow的工作原理,您应该继续原来的问题,而不是发布新的问题。