Getpreferences no funciona en fragment

Comandos como findViewById , getShanetworkingPreferences no funcionan dentro de Fragment . Estoy usando kotlin y mi código es el siguiente

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

INICIAR SESIÓN

 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$DeclanetworkingOnClickListener.resolveMethod(AppCompatViewInflater.java:327) at android.support.v7.app.AppCompatViewInflater$DeclanetworkingOnClickListener.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) 

En teoría, la respuesta anterior ( https://stackoverflow.com/a/44469679/3845798 ) es correcta, pero allí tiene que ser en Kotlin. Al igual que getActivity() , getView() tendrá acceso como una propiedad. Además, su val no Val .

Aquí hay un ejemplo simple de cómo usar findViewById() , getShanetworkingPreferences() dentro de la actividad.

Código de actividad principal –

 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() } } 

Y este es mi fragment Class

 class MainFragment : Fragment() { lateinit var show: Button lateinit var save: Button lateinit var text: TextView var prefs: ShanetworkingPreferences? = 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.getShanetworkingPreferences("FUN",MODE_PRIVATE) save.setOnClickListener { val editor = prefs!!.edit() editor.putString("Saving", "This is saveValueFromShanetworkingPref") editor.apply() } show.setOnClickListener { text.setText(prefs?.getString("Saving","NotSaved")) } } companion object { fun newInstance(): MainFragment { val fragment = MainFragment() return fragment } } } 

Es un ejemplo simple con un text y dos botones.

Primero tienes que save y mostrar.

Además, para el locking de tu aplicación, puedes verificar esta solución .

Está llamando a un object Context en Fragment , el Fragmento no es un Context cambie esta línea a algo como esto:

 Val shanetworkingpref = getActivity().getShanetworkingPreferences("logindata",Context.MODE_PRIVATE)} 

Y use el método getView en onCreateView para usar findViewById , por ejemplo:

 TextView tv = (TextView) getView().findViewById(R.id.mtTextview); 
  • Escribir una interfaz Copyable más elegante que en Java
  • La forma más fácil de convertir una cadena en un HashMap
  • Android comtesting si la input de text (hora) coincide con el formatting
  • Forma idiomática de secuencia dertwigda en tres lists usando Kotlin
  • Factorial usando el bucle `for` en Kotlin
  • ¿Por qué algunos files de Kotlin muestran el ícono de candado?
  • JsonProperty no funciona mientras la minificación está habilitada
  • Cómo componer nulables en Kotlin
  • Devuelve el resultado de la consulta postgresql en una function
  • ¿Por qué los texts no cambian en actividad?
  • El evento táctil de visitas llena toda la pantalla