我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
我正在尝试为 android 应用编写测试。其中有 1Activity和 2 fragments(即FragmentOne和FragmentTwo)通过单击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
让应用程序使用LiveData和ViewModel for UI来观察存储库中的数据更新。
一切正常。现在有人提出“ LiveData尚未被很好地采用,也许应该切换到使用协程的频道”。
首先,不确定有关LiveData的陈述是否正确。我敢肯定,协程的功能可以在没有LiveData的情况下完成。但是我觉得每个人都有自己的目标任务,而从Google的语音/示例中来看,LiveData是使用Android体系结构组件构建的,用于诸如在数据存储库和UI之间提供实时数据通道的情况。
该频道是kotlin的语言功能。当然可以在许多情况下使用它。我只是希望不是因为它已命名为“ channel”,所以人们觉得比这里使用LiveData更合适。
一个不太合适的示例是,消息总线/事件队列是否也适合在使用LiveData的地方使用?他们也可以订阅/观察。
只是没有足够的有力证据来证明LiveData在这种情况下更好用,或者协程通道更好,而不是非常了解该通道。
任何人都想分享一些想法吗?
android android-livedata android-architecture-components kotlin-coroutines
目前我在我的应用程序中有这种方法:
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
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)
提前致谢.