Фрагмент не привязан к контексту с использованием метода getString - PullRequest
0 голосов
/ 08 мая 2020

Когда я пытаюсь интернационализировать приложение с помощью xml / строк, я использую метод getString, чтобы установить строку в переменную во фрагменте. Во время теста я не отправлял cra sh, но после онлайн-обновления он начал cra sh.

в субфрагменте нужно переопределить переменную:

        override val titleText: String get() = getString(R.string.string_goods_input_order_select_scan_waybill_num)

Я нахожу приложение для использования метода getstring.

    /**
     * Return a localized string from the application's package's
     * default string table.
     *
     * @param resId Resource id for the string
     */
    @NonNull
    public final String getString(@StringRes int resId) {
        return getResources().getString(resId);
    }

и titleText вызывается в onViewCreated в родительском классе. Когда я тестировал, сбоев не было но пользователи обновляются до новой версии , они не могут открыть приложение .

это cra sh log:

java.lang.IllegalStateException: Fragment b{d85a8fe} not attached to a context.
    at android.support.v4.app.Fragment.requireContext(Fragment.java:31)
    at android.support.v4.app.Fragment.getResources(Fragment.java:0)
    at android.support.v4.app.Fragment.getString(Fragment.java:0)
    at com.sfic.huaweiministorebarpistol.print.PrintSkuFragment.<init>(PrintSkuFragment.java:6)
    at com.sfic.huaweiministorebarpistol.print.PrintSkuFragment$Companion.a(PrintSkuFragment.java:2)
    at com.sfic.huaweiministorebarpistol.usercenter.UserCenterFragment$onViewCreated$8.onClick(UserCenterFragment.java:70)
    at android.view.View.performClick(View.java:6308)
    at android.view.View$PerformClick.run(View.java:24949)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6523)
    at java.lang.reflect.Method.invoke(Method.java)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:857)

Я пытаюсь заменить titleText: String методом в родительском классе:

abstract fun titleText(): String

и в подклассе

override fun titleText(): String {
    return getString(R.string.string_location_num)
}

В настоящее время я предполагаю, что это потому, что контекст getString пуст, но я не воспроизводил cra sh

1 Ответ

0 голосов
/ 08 мая 2020

Сообщение об ошибке говорит:

at android.support.v4.app.Fragment.getString(Fragment.java:0)
at com.sfic.huaweiministorebarpistol.print.PrintSkuFragment.<init>(PrintSkuFragment.java:6)

Итак, вы звоните getString(), когда ваш PrintSkuFragment инициализируется. Вы не можете вызвать getString() (или получить доступ к переменным, таким как ваш get() = getString(...)), когда ваш фрагмент создается - их нужно инициализировать только после того, как фрагмент будет прикреплен (т.е. вызывается onAttach()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...