【问题标题】:Android: How do I get clipboard data?(Can't get clipboardmanager)Android:如何获取剪贴板数据?(无法获取剪贴板管理器)
【发布时间】:2021-02-16 23:30:00
【问题描述】:

关于粘贴主题的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)
        }
    }
}

我应该改变什么?

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    getSystemService()Context 中的一个方法,而Fragment 不是Context

    当片段附加到片段时,您可以使用requireContext() 访问片段的上下文。片段初始化阶段太早了。

    所以添加上下文访问并移动

    var clipboard = requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
    

    到一个函数,例如pasteText()

    【讨论】:

      【解决方案2】:

      getSystemServiceContext 中的方法,在下面的片段中使用

      var clipboard = requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
      

      【讨论】:

        猜你喜欢
        • 2021-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-11
        相关资源
        最近更新 更多