【问题标题】:How can I pass a var of ClipboardManager to Fragment in Kotlin?如何将 ClipboardManager 的 var 传递给 Kotlin 中的 Fragment?
【发布时间】:2018-12-10 03:11:30
【问题描述】:

我已阅读文章How to pass and get value from fragment and activity android kotlin

我必须将活动中的 var mClipboardManager(参见代码 A)传递给 Fragment。

如何传递 var ?以及如何在 Fragment 中获取 var?

代码 A

   private lateinit var mClipboardManager: ClipboardManager 

    private val aPrimaryClipChangedListener = ClipboardManager.OnPrimaryClipChangedListener {
        if (mClipboardManager.hasPrimaryClip() && mClipboardManager.primaryClipDescription.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN) ) {
            var pasteData: String = ""
            val item = mClipboardManager.primaryClip.getItemAt(0)
            pasteData = item.text.toString().trim()
            addClipboardRecord(pasteData)
        }
    }

【问题讨论】:

  • 真的需要通过吗?你不能在Fragment 中只使用getSystemService() 吗?到处都是相同的系统服务。
  • 你真的不知道。 Fragment 可以在连接Context 后立即访问它,这就是您获得系统服务所需的全部内容。为什么在Fragment 中取不到ClipboardManager

标签: android kotlin


【解决方案1】:

你不需要传递,你可以在你的片段中得到这个,但是你可以通过 2 方式将 mClipboardManager 从你的活动传递到你的片段中

1。从您的活动中设定价值。

首先,使用getFragmentManager().findFragmentByTag("YourFragmentTag")获取片段实例

在你的片段中,创建一个方法

public void setClipboardManager(ClipboardManager clipboardManager) {
  // here you get an instance of clipboardManager, do anything you want
}

并在您的活动中调用此方法:

fragment.setClipboardManager(mClipboardManager)

2。从您的片段中获取mClipboardManager 的值

首先,在你的活动中创建一个方法

public ClipboardManager getClipboardManager() {
   return mClipboardManager;
}

那么,在

@Override public void onAttach(Context context) {
        super.onAttach(context);
        if (getActivity() instanceof YourActivity) {
            ((YourAcitivity) getActivity()).getClipboardManager()
            // here you get an instance of clipboardManger, do anything you want
        }
    }

【讨论】:

    猜你喜欢
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2011-12-14
    • 2018-08-20
    相关资源
    最近更新 更多