android - Android:如何获取剪贴板数据?(无法获取剪贴板管理器)
问题描述
关于粘贴主题的Android官方文档说:
使用 getSystemService(CLIPBOARD_SERVICE) 获取全局 ClipboardManager 对象。还要声明一个全局变量来包含粘贴的文本:
var clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
var pasteData: String = ""
当我对片段执行完全相同的操作时,它会告诉我创建 getSystemService 函数。这是我所做的:
我的导入(我在 Android Studio 告诉我的所有内容上都单击了导入):
import android.content.ClipboardManager
import android.content.Context
import android.content.Context.CLIPBOARD_SERVICE
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import androidx.core.content.ContextCompat.getSystemService
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import com.google.android.material.textfield.TextInputEditText
我的代码:
class FirstFragment : Fragment() {
var clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
var pasteData: String = ""
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.pgn_page, container, false)
}
private fun pasteText():String {
val abc = clipboard?.primaryClip
val item = (abc?.getItemAt(0))
return item?.text.toString()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
//val pgnBar: TextInputEditText = view.findViewById(R.id.pgncode)
val pgnBar: TextInputEditText = view.findViewById(R.id.pgncode)
val clipButton: Button = view.findViewById(R.id.clipboardButton)
pgnBar.setText(PGNCode.value)
clipButton.setOnClickListener{
pgnBar.setText(pasteText())
}
view.findViewById<Button>(R.id.startAnalysisButton).setOnClickListener {
PGNCode.value = pgnBar.getText().toString()
findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
}
}
}
我应该改变什么?
解决方案
getSystemService()
是 in 中的一个方法,Context
而 aFragment
不是 a Context
。
当片段附加到片段时,您可以使用它requireContext()
来访问片段的上下文。片段初始化阶段太早了。
所以添加上下文访问并移动
var clipboard = requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
到一个函数,例如pasteText()
.
推荐阅读
- sql - 基于某些内容的总和表
- java - 通过 jni 从 Java 调用时,C++ iostreams 不起作用
- c# - 通过在redis缓存中传递一个键来获取多个值
- r - 有没有办法创建一个带有 n 种颜色的 ggplot 多面散点图,以便颜色交替或从调色板中随机化?
- java - 在没有 web.xml 的 Spring 应用程序中使用过滤器(在外部 JAR 中)
- javascript - 作为ajax请求的结果访问Json
- python - 使用 SymPy / Python 进行部分分数分解
- c# - 在后台运行计时器 c# 控制台
- typescript - 单元测试公共方法时内部私有方法未定义 - Jest & TypeScript
- java - 上标中的字符串是 ? 在 HTML 页面中