Getpreferences не работает в фрагменте

Команды, такие как findViewById , getSharedPreferences не работают внутри Fragment Я использую kotlin, и мой код выглядит следующим образом.

 fun update (v:View){ Val sharedpref = getSharedPreferences("logindata",Context.MODE_PRIVATE)} 

ЖУРНАЛ

 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.techno.app, PID: 25691 java.lang.IllegalStateException: Could not find method update(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) at android.view.View.performClick(View.java:5721) at android.widget.TextView.performClick(TextView.java:10936) at android.view.View$PerformClick.run(View.java:22620) at android.os.Handler.handleCallback(Handler.java:739) 

    Вы поняли, что вышеупомянутый ответ ( https://stackoverflow.com/a/44469679/3845798 ) верен, но там он должен быть в Котлине. Как getActivity() , getView() будет иметь доступ как свойство. Кроме того, его val не Val .

    Вот простой пример использования findViewById() , getSharedPreferences() внутри действия.

    MainActivity Code –

     class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) setBaseFragment() } private fun setBaseFragment() { val fragment = MainFragment.newInstance() supportFragmentManager .beginTransaction() .replace(R.id.fragment_container, fragment) .commit() } } 

    И это мой класс фрагментов

     class MainFragment : Fragment() { lateinit var show: Button lateinit var save: Button lateinit var text: TextView var prefs: SharedPreferences? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater!!.inflate(R.layout.fragment_main, container, false) } override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) show = view?.findViewById(R.id.showButton) as Button save = view?.findViewById(R.id.saveButton) as Button text = view?.findViewById(R.id.textResult) as TextView prefs = activity.getSharedPreferences("FUN",MODE_PRIVATE) save.setOnClickListener { val editor = prefs!!.edit() editor.putString("Saving", "This is saveValueFromSharedPref") editor.apply() } show.setOnClickListener { text.setText(prefs?.getString("Saving","NotSaved")) } } companion object { fun newInstance(): MainFragment { val fragment = MainFragment() return fragment } } } 

    Это простой пример с текстом и двумя кнопками.

    Сначала вы должны сохранить и показать.

    Кроме того, для вашего сбоя приложения вы можете проверить это решение .

    Вы вызываете объект Context во Fragment , Фрагмент не является Context измените эту строку на что-то вроде этого:

     Val sharedpref = getActivity().getSharedPreferences("logindata",Context.MODE_PRIVATE)} 

    И используйте метод getView в onCreateView для использования findViewById , например:

     TextView tv = (TextView) getView().findViewById(R.id.mtTextview); 
    Intereting Posts
    Коутин Котлин с возвращаемым значением Ошибка Android Kotlin: «Тип возврата – это« единица », которая не является подтипом переопределенного« Добавление языка на клавиатуру без открытия настроек Java-обработчик аннотации – аннотированные тесты классов классов Kotlin Ошибка «Переменная должна быть инициализирована» при делегировании инициализированному свойству Тестирование модуля Kotlin для функциональных параметров и объектов Как обновить виджет Android Studio Kotlin Kotlin – функции расширения и типы платформ? kotlin todo-mvp использование framents Переключатель мертвеца в Котлине Могу ли я запустить Android Studio 3.0 без Kotlin? Как создать вершину с завода в VertX? Невозможно найти сеттер для поля – используя базу данных Kotlin с комнатой Как реализовать ленивое свойство в Котлине, которое требует другого имущества? Как высмеять kotlin ByteArray с помощью Mockito?