如何处理多次点击

时间:2019-07-25 08:32:28

标签: android android-studio kotlin

在问之前,我进行了搜索,但对我来说没有成功。

我在尝试处理Android应用程序中按钮的多次单击时遇到一些麻烦。

问题是当向按钮发送垃圾邮件时,我导航到另一个片段。 垃圾邮件按钮会导致导航崩溃。

我尝试了几种解决方案,但是我发现没有一个对我有用。 我尝试过了 :  -禁用按钮  -带有状态(boolean)的句柄

实际上,我出现导航崩溃“此navController未知blblbl” 我希望当我向该按钮发送垃圾邮件时,该按钮第一次起作用,而其他时候却被阻止。

这里有一些代码:

override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
    R.id.action_next -> validateAndNavigateTo(R.id.action_intervention_product_fragment_to_intervention_summary_fragment)
    R.id.action_validate -> validateAndNavigateTo(getActionId())
    else -> {
        if (!isFromSummary) interventionProductViewModel.saveMemoryProductsInDatabase()
        interventionProductViewModel.emptyListSelectedChemicalProducts()
        super.onOptionsItemSelected(item)
    }
}

private fun validateAndNavigateTo(actionId: Int): Boolean {
    if (validate()) {
        val bundle = Bundle().apply {
            putString(INTERVENTION_ID, interventionId)
            if (arguments?.getString(USE_CASE) != null) {
                putString(USE_CASE, arguments?.getString(USE_CASE))
                putString(FILTER_BY_FIELD_CODE_SERVER, arguments?.getString(FILTER_BY_FIELD_CODE_SERVER))
            }
            putString(FILTER_BY_FIELD_CODE_SERVER, arguments?.getString(FILTER_BY_FIELD_CODE_SERVER))
        }
        interventionProductViewModel.saveMemoryProductsInDatabase()
        getKoin().getOrCreateScope(SCOPE_FIELD).close()
        view?.findNavController()?.navigate(actionId, bundle)
    }
    return true
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

从一个目的地导航到另一个目的地时,请尝试使用此代码。
以下代码位于Java中,复制并粘贴后,编辑器会自动将其转换为Kotlin。

public static void navigate(View view, @IdRes int destination, @Nullable Bundle args, NavOptions navOptions) {
         try {
             Navigation.findNavController(view).navigate(destination, args, navOptions);
         } catch (IllegalArgumentException e) {
             Log.e(TAG, "Multiple navigation attempts handled here");
         }
    }
相关问题