当前位置: 首页 > 知识库问答 >
问题:

kotlinx.android.synthetic在DialogFragment中返回null

公冶昆杰
2023-03-14

在我开始之前,我读过类似的文章,但它们对我不起作用。

正如我在标题中解释的那样,当我单击肯定按钮(在这种情况下为“确定”)时,我会得到一个NPE。如果有人能指出我做得不正确,那就太好了!下面是我的设置的抽象版本

class MainFragment: DialogFragment() {

    override fun onCreateDialog(savedInstanceState: Bundle?) =
            AlertDialog.Builder(context!!)
                .setView(FragmentMainBinding.inflate(LayoutInflater.from(context)).root)
                .setTitle(R.string.title_main)
                .setNegativeButton(R.string.cancel, null)
                .setPositiveButton(R.string.ok) { _, _ -> onPositiveButtonTapped() }
                .create()

    private fun onPositiveButtonTapped() {
        val g = arrayListOf(ground_nbr_edit_text.text.toString()) // NullPointerException
        // ...
    }

}
<?xml version="1.0" encoding="utf-8"?>
<layout>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <EditText
            android:id="@+id/ground_nbr_edit_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>
</layout>

共有1个答案

澹台臻
2023-03-14

DialogFragment 在 onCreateDialog() 之后调用 onCreateView(),然后将该视图用于对话框的内容,替换已在 onCreateDialog() 中设置的内容。因此,将视图创建移动到 onCreateView() 中

class MainFragment: DialogFragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?) =
        FragmentMainBinding.inflate(inflater).root

    override fun onCreateDialog(savedInstanceState: Bundle?) =
            AlertDialog.Builder(context!!)
                .setTitle(R.string.title_main)
                .setNegativeButton(R.string.cancel, null)
                .setPositiveButton(R.string.ok) { _, _ -> onPositiveButtonTapped() }
                .create()

    private fun onPositiveButtonTapped() {
        val g = arrayListOf(ground_nbr_edit_text.text.toString()) // NullPointerException
        // ...
    }

}
 类似资料:
  • 我有一个问题,正确的对话片段删除后,方向被改变。我想这是由于旧的上下文,因为在该活动被重新创建后,会创建一个新的活动和相应的上下文。我知道我可以在onSaveInstance中设置一些变量来保存对话框状态,如果必要的话重新创建对话框,或者只在清单“定向”中放置一个属性。但是,也许有更好的方法来做到这一点,不在manifest中硬编码,也不在onSaveIntance中手动保存?我还尝试在main片

  • 从我的中,每个项目中都有多个按钮,我想要的是在单击,并在单击。 问题是我不知道如何才能或如何才能实现一个回调时被点击,并可以执行不同的方法或操作根据什么按钮是点击每个项目。 在我的适配器类上 这是我的DialogFragment类

  • 问题内容: 我有一个简单的程序,其中显示了一些项目的列表,单击其中的一个后,单击的项目将传递回附件。当用户取消对话框时,我还想执行一些默认处理(使用 后退按钮 )-更具体地说,在这种情况下,我想向活动传递一个空字符串。 但是,如果将对话框放在(来自 兼容性包 )中, 则使用后退按钮关闭对话框时不会调用 。我究竟做错了什么? 问题答案: 这可能与您的代码中没有显式调用的事实有关。该OnCancelL

  • 问题内容: 我正在尝试在Java程序中阅读标准输入。我期望一系列数字后跟换行符,例如: 当通过eclipse内置控制台提供输入时,一切都会顺利进行。但是,使用Windows命令行时,程序将输出: 我的代码是: 有什么线索吗? 问题答案: 得到a 表示相关对象已到达EOF(文件末尾),或者换句话说,它们无法再获得任何标准输入。现在,您的代码明显的问题是: 的每个方法调用都会创建一个 新的 。 每个这

  • 我们正在测试Docusign在业务应用程序的审批流中的使用。我们使用OAuth解决方案进行服务集成,即JWT(JSONWeb令牌)流。 当我打电话给apiClient时。配置JWTAuthorizationFlow方法在IIS Localhost中托管的应用程序中,我获得OAuthToken并可以发送信封。 但是,当我在测试服务器上部署解决方案时,使用相同的userId、integratorKey

  • 问题内容: 我需要构建一个DialogFragment,它将用户输入从对话框返回到活动。该对话框需要在OnClickListener中调用,当单击列表视图中的元素时会调用该对话框。 DialogFragment的返回值(用户的输入)应在活动的OnClickListener中直接可用。 我尝试通过遵循官方文档来实现此目的:http : //developer.android.com/guide/to