當在片段類中呼叫getString()時,我得到了IllegalStateException
。Caused by: java.lang.IllegalStateException: Fragment SomeFragment{1df37025} (29efd1d0-77c1- 4293-a0f6-b808c7559cf4)}未附加到 a context。
在androidx.fragment.app。 Fragment.requireContext(Fragment.java:805)
at androidx.fragment.app.Fragment.getResources(Fragment.java:869)
at androidx.fragment.app.Fragment.getString(Fragment.java:891)
SomeFragment代碼
public void someMethod() {
getString(R.string.some_res)
}
測驗代碼
@Before
fun setUp(){
val activity = Robolectric.buildActivity(SomeActivity::class.java).create()。get()
fragment = SomeFragment()
fragmentManager = activity.supportFragmentManager
val fragmentTransaction: FragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.add(fragment, null)
fragmentTransaction.commit()
}
@Test
@Throws(Exception::class)
fun someTest() {
fragment.someMethod()
}
uj5u.com熱心網友回復:
我認為問題可能出在fragmentTransaction.commit()上,因為commit是異步的,所以當someTest()開始時,提交可能已經結束或者沒有。檔案中說:
提交并不是立即發生的
將commit替換為commitNow或commitNowAllowingStateLoss應該可以解決這個問題。從上面參考的同一個檔案中,commit方法:
同步地提交這個事務
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/310300.html
標籤:
