标签: android-architecture-components

OnBackPressedCallback 中的 NavController 出现问题

does not have a NavController set在 OnBackPressedCallback 中遇到错误。这是代码

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {

    fragmentView = inflater.inflate(R.layout.patient_info_fragment, container, false)

    if(Utils.connectedToInternet()){
        fragmentView.pastScreeningsButton.visibility = View.GONE
    }

    requireActivity().onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
                Navigation.findNavController(fragmentView).navigate(R.id.action_patientInfoFragment_to_patientsList)
        }
    })
    setHasOptionsMenu(true)


    return fragmentView
}
Run Code Online (Sandbox Code Playgroud)

当我回到实现它的片段时,我只会收到这个错误。

android:name="androidx.navigation.fragment.NavHostFragment"在家庭片段中。

澄清一下,我正在使用导航控制器围绕我的应用程序进行所有导航,并且效果很好。我只在这个内部得到这个错误,OnBackPressedCallback并且只有当用户导航回实现它的片段时。

如果您需要查看我的更多代码,请告诉我。

android kotlin android-architecture-components android-navigation-editor

0
推荐指数
1
解决办法
1364
查看次数

如何使用`androidx`和`navgation architecture`运行android仪器测试?

我正在尝试为 android 应用编写测试。其中有 1Activity和 2 fragments(即FragmentOneFragmentTwo)通过单击FragmentOne它上的按钮转到FragmentTwo. 我写了同样的测试,我正在使用androidxand navigation architecture。我已阅读此链接和此链接,但没有成功。

这是我当前的代码-

示例仪器测试

@RunWith(JUnit4::class)
class ExampleInstrumentedTest {

    @Test
    fun checkSecondFrag() {
        // Create a mock NavController
        val mockNavController = mock(NavController::class.java)

        // Create a graphical FragmentScenario for the OneFragment
        val oneFragmentScenario = launchFragmentInContainer<OneFragment>()

        // Set the NavController property on the fragment
        oneFragmentScenario.onFragment { fragment ->
            Navigation.setViewNavController(fragment.requireView(), mockNavController)
        }

        // Verify that performing a click prompts …
Run Code Online (Sandbox Code Playgroud)

android android-espresso android-architecture-components androidx

0
推荐指数
1
解决办法
1476
查看次数

android LiveData或协程通道

让应用程序使用LiveData和ViewModel for UI来观察存储库中的数据更新。

一切正常。现在有人提出“ LiveData尚未被很好地采用,也许应该切换到使用协程的频道”。

首先,不确定有关LiveData的陈述是否正确。我敢肯定,协程的功能可以在没有LiveData的情况下完成。但是我觉得每个人都有自己的目标任务,而从Google的语音/示例中来看,LiveData是使用Android体系结构组件构建的,用于诸如在数据存储库和UI之间提供实时数据通道的情况。

该频道是kotlin的语言功能。当然可以在许多情况下使用它。我只是希望不是因为它已命名为“ channel”,所以人们觉得比这里使用LiveData更合适。

一个不太合适的示例是,消息总线/事件队列是否也适合在使用LiveData的地方使用?他们也可以订阅/观察。

只是没有足够的有力证据来证明LiveData在这种情况下更好用,或者协程通道更好,而不是非常了解该通道。

任何人都想分享一些想法吗?

android android-livedata android-architecture-components kotlin-coroutines

0
推荐指数
1
解决办法
276
查看次数

如何正确处理Android开发中的View State

目前我在我的应用程序中有这种方法:

ViewState(每个屏幕一个视图状态)

sealed class CategoriesViewState {
    object Loading : CategoriesViewState()

    data class Error(
        val errorMessage: String,
        val messageType: UIComponentType
    ) : CategoriesViewState()

    data class CategoryList(
        val categories: List<Category>
    ) : CategoriesViewState()
}
Run Code Online (Sandbox Code Playgroud)

我使用实时数据在我的片段/活动中观察这种状态:

  viewModel.viewState.observe(viewLifecycleOwner, Observer {
            when (it) {
                is CategoriesViewState.Loading -> {
                progress_bar.visibility = View.VISIBLE

                    Log.d(TAG, "LOADING")
                }

                is CategoriesViewState.Error -> {
                progress_bar.visibility = View.GONE

                    Log.d(TAG, "ERROR")

                }

                is CategoriesViewState.CategoryList -> {
                progress_bar.visibility = View.GONE

                    Log.d(TAG, "DATA")

                }
            }
        })
Run Code Online (Sandbox Code Playgroud)

它工作正常。

在我看来,随着应用程序的增长,效率很低。

假设我的应用程序中有 20 个屏幕:我需要 20 个视图状态,我需要在每个屏幕中编写相同的 …

android mvvm kotlin android-livedata android-architecture-components

0
推荐指数
1
解决办法
699
查看次数

使用-Android Sqlite Room ORM通过参数传递TableName时出错

1.当尝试使用tablename作为参数使用方法访问数据时,使用android中的Room Library获取下面提到的错误.

- >查询有问题:ERROR] SQL错误或缺少数据库(没有这样的表:表名)

MainActivity.class

userData1= userSampleDatabase.daoAccessForUser().getItembyIdvalue("UserData","1");
Run Code Online (Sandbox Code Playgroud)

DaoAccessForUser.class

 @Query("select * from 'tableName' where id = :id")
 List<UserData> getItembyIdvalue(String tableName,String id);
Run Code Online (Sandbox Code Playgroud)

提前致谢.

android android-room android-architecture-components

-1
推荐指数
1
解决办法
1626
查看次数