首页 > 解决方案 > 与 Android Studio 中的计数器对话

问题描述

我有一个应用程序通过 NFC 在卡上执行写入,具体取决于通过的数字将执行数字或其他读取。我想我用一个简单的 for 循环来做这件事,问题是我不知道把那个 for 循环放在哪里。我给你一个类的例子:

class HomeFragment : Fragment(), OnClickDetailsMonuments {

    private lateinit var homeFragmentViewModel: HomeFragmentViewModel
    private lateinit var homeMonumentsAdapter: MonumentsAdapter

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View =
        inflater.inflate(R.layout.home_fragment, container, false)

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        initViews()
        getObservers()
        onClickGoToMaps(view)

        homeFragmentViewModel.loadJsonFromRetrofit()

    }

    private fun onClickGoToMaps(view: View) {
        fbGoToMaps.setOnClickListener {
            view.findNavController().navigate(R.id.googleMapsMonumentsFragment)
        }
    }

    private fun getObservers() {
        viewModel.getNFCInfo().observe(viewLifecycleOwner, Observer {
                when(it.status){
                    AsyncResult.Status.SUCCESS -> {
                        NFCProvider.initialize(context, it.data)
                    }
                    AsyncResult.Status.ERROR -> {

                    }
                    AsyncResult.Status.LOADING -> {

                    }
                }
            })
    }

    override fun onClickFavListener(monuments: MonumentsVO) {
        homeFragmentViewModel.updateDatabaseFavoriteCheckFromViewModel(monuments.id, monuments.fav)
    }

    override fun onClickRowListenerExtras(monuments: MonumentsVO, position: Int, extras: FragmentNavigator.Extras) {
        val bundle = bundleOf(BUNDLE_MONUMENT to monuments)
        view?.findNavController()?.navigate(R.id.detailsMonumentsFragment, bundle, null, extras)
    }

    override fun onClickRowListener(monuments: MonumentsVO, position: Int) {}

    private fun initViews() {
        homeFragmentViewModel = ViewModelProviders.of(this).get(HomeFragmentViewModel::class.java)
        rvHomeFragmentMonumentsRetrofit.setHasFixedSize(true)
        val layoutManager = LinearLayoutManager(context)
        rvHomeFragmentMonumentsRetrofit.layoutManager = layoutManager
    }

    override fun onResume() {
        super.onResume()
        (activity as AppCompatActivity).supportActionBar?.show()
    }

    private fun showDialog(title: String, process: String, titleButton: String) {
        val dialog = CustomSuccessDialog(title, process, titleButton)
        dialog.show()
    }

    override onNewIntentResult(intent) {
        val message = NFCProvider.retrieveNfcMessage(intent)

        if(message) {
            showDialog("Correct reading", "1 de 4", "Continue")
        } else {
            showDialog("Error reading", "1 de 4", "Retry")
        }
    }

}

如您所见,问题是当我启动 NFC 时是我传递消息的时候。我从互联网服务收到这条消息,它返回我必须记录的卡片数量,这是我必须通过的卡片数量,因为一方面我有 NFC 所需的 onNewIntent 和另一方面,观察者,我不知道该怎么做才能把它们放在一起,每次我写一张NFC卡我都会得到正确的对话,当我继续下一个时,对话的数量会增加:1 of 4, 2 of 4, 3 of 4 等等。看看你能不能帮我一把。非常感谢。

标签: android

解决方案


您可以保存对话框的实例并在对话框中更新您的 textView,如下所示:

if(message) {
    if(mDialog?.isShowing == false) {
        showDialog("Correct reading", "1 de 4", "Continue")
    } else {
        mDialog.updateText("$count de 4")
        count ++
    }
}

您的 showDialog 方法将如下所示:

private fun showDialog(title: String, process: String, titleButton: String) {
    mDialog = CustomSuccessDialog(title, process, titleButton)
    mDialog.show()
}

推荐阅读