Estoy tratando de leer SharedPreferences dentro de Fragment. Mi código es lo que utilizo para obtener preferencias en cualquier otra actividad.
SharedPreferences preferences = getSharedPreferences("pref", 0);
Me sale un error
Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper
Intenté seguir estos enlaces pero no tuve suerte Accediendo a SharedPreferences a través de métodos estáticos y Static SharedPreferences . Gracias por cualquier solución.
this
palabra clave necesaria al hacerthis.getActivity().getShared..
?La respuesta marcada no funcionó para mí, tuve que usar
EDITAR:
O simplemente intente eliminar
this
:SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
fuente
Como nota de precaución, esta respuesta proporcionada por el usuario que está arriba de mí es correcta.
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0);
Sin embargo, si intenta obtener algo en el fragmento antes de que onAttach se llame getActivity () devolverá nulo.
fuente
Puede hacer que el
SharedPrefences
enonAttach
forma de fragmento de esta manera:@Override public void onAttach(Context context) { super.onAttach(context); SharedPreferences preferences = context.getSharedPreferences("pref", 0); }
fuente
Esto me sirvió
Consulte aquí https://developer.android.com/guide/topics/ui/settings.html#ReadingPrefs
fuente
getActivity()
y noonAttach()
me ayudó en la misma situacióntal vez hice algo mal
pero! Encontré otra decisión Creé
un campo
Context thisContext
dentro de mi FragmentoY obtuve un contexto actual del método onCreateView
y ahora puedo trabajar con preferencias compartidas desde el fragmento
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... thisContext = container.getContext(); ... }
fuente
Para definir la preferencia en Fragmento:
SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR",Context.MODE_PRIVATE); editor.putString("credi_credito",cre); editor.commit();
Para llamar a otra actividad o fragmentar los datos de preferencia:
SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR", Context.MODE_PRIVATE); credit=pref.getString("credi_credito",""); if(credit.isNotEmpty)...
fuente
Es posible obtener un contexto desde dentro de un
Fragment
Solo haz
public class YourFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View root = inflater.inflate(R.layout.yout_fragment_layout, container, false); // get context here Context context = getContext(); // do as you please with the context // if you decide to go with second option SomeViewModel someViewModel = ViewModelProviders.of(this).get(SomeViewModel.class); Context context = homeViewModel.getContext(); // do as you please with the context return root; } }
También puede adjuntar un
AndroidViewModel
en elonCreateView
método que implementa un método que devuelve el contexto de la aplicaciónpublic class SomeViewModel extends AndroidViewModel { private MutableLiveData<ArrayList<String>> someMutableData; Context context; public SomeViewModel(Application application) { super(application); context = getApplication().getApplicationContext(); someMutableData = new MutableLiveData<>(); . . } public Context getContext() { return context } }
fuente
Quizás esto sea útil para alguien después de algunos años. Una nueva forma, en Androidx, de ingresar al
SharedPreferences()
fragmento es implementar engradle dependencies
implementation "androidx.preference:preference:1.1.1"
y luego, dentro de la llamada de fragmento
fuente