Saya mencoba membaca SharedPreferences di dalam Fragment. Kode saya adalah apa yang saya gunakan untuk mendapatkan preferensi dalam Aktivitas lainnya.
SharedPreferences preferences = getSharedPreferences("pref", 0);
Saya mendapatkan kesalahan
Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper
Saya telah mencoba mengikuti tautan ini tetapi tidak berhasil Mengakses SharedPreferences melalui metode statis dan Static SharedPreferences . Terima kasih atas solusinya.
android
android-fragments
sharedpreferences
Menandai
sumber
sumber
this
kata kunci ini diperlukan saat melakukanthis.getActivity().getShared..
?Jawaban yang ditandai tidak berhasil untuk saya, saya harus menggunakan
EDIT:
Atau coba hapus
this
:SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
sumber
Sebagai catatan hati-hati, jawaban yang diberikan oleh pengguna di atas saya benar.
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0);
Namun, jika Anda mencoba mendapatkan apa pun dalam fragmen sebelum onAttach dipanggil getActivity () akan mengembalikan null.
sumber
Anda dapat membuat metode
SharedPrefences
inonAttach
fragment seperti ini:@Override public void onAttach(Context context) { super.onAttach(context); SharedPreferences preferences = context.getSharedPreferences("pref", 0); }
sumber
Ini melakukan trik untuk saya
Periksa di sini https://developer.android.com/guide/topics/ui/settings.html#ReadingPrefs
sumber
getActivity()
danonAttach()
tidak membantu saya dalam situasi yang samamungkin saya melakukan sesuatu yang salah
tapi! Saya menemukan keputusan lain
Saya telah membuat bidang
Context thisContext
di dalam Fragmen sayaDan mendapat konteks saat ini dari metode onCreateView
dan sekarang saya dapat bekerja dengan pref bersama dari fragmen
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... thisContext = container.getContext(); ... }
sumber
Untuk menentukan preferensi di Fragmen:
SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR",Context.MODE_PRIVATE); editor.putString("credi_credito",cre); editor.commit();
Untuk memanggil aktivitas lain atau memecah data preferensi:
SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR", Context.MODE_PRIVATE); credit=pref.getString("credi_credito",""); if(credit.isNotEmpty)...
sumber
Dimungkinkan untuk mendapatkan konteks dari dalam a
Fragment
Lakukan saja
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; } }
Anda juga dapat melampirkan
AndroidViewModel
dalamonCreateView
metode yang mengimplementasikan metode yang mengembalikan konteks aplikasipublic 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 } }
sumber
Mungkin ini bermanfaat bagi seseorang setelah beberapa tahun. Cara baru, di Androidx, untuk masuk ke
SharedPreferences()
dalam fragmen adalah dengan menerapkan kegradle dependencies
implementation "androidx.preference:preference:1.1.1"
dan kemudian, di dalam panggilan fragmen
sumber
gunakan aktivitas yang diperlukan dalam fragmen kotlin
val sharedPreferences = requireActivity().getSharedPreferences(loginmasuk.LOGIN_DATA, Context.MODE_PRIVATE)
sumber