97

Fragment内のSharedPreferencesを読み込もうとしています。私のコードは、他のアクティビティで設定を取得するために使用するものです。

     SharedPreferences preferences = getSharedPreferences("pref", 0);

エラーが発生します

    Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper    

私はこれらのリンクをたどろうとしましたが、運が悪かったのですが、静的メソッド静的SharedPreferencesを介してSharedPreferencesにアクセスしました。解決策をありがとうございます。

4

12 に答える 12

273

メソッドgetSharedPreferencesContextオブジェクトのメソッドであるため、からgetSharedPreferencesを呼び出すだけでは機能しFragmentません...コンテキストではないためです!(アクティビティはContextの拡張であるため、そこからgetSharedPreferencesを呼び出すことができます)。

したがって、アプリケーションのコンテキストを取得する必要があります

// this = your fragment
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
于 2012-07-31T13:47:10.733 に答える
18

マークされた答えは私にはうまくいきませんでした、私は使用しなければなりませんでした

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());

編集:

thisまたは、 :を削除してみてください

SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
于 2014-07-03T09:49:57.973 に答える
8

注意点として、私の上のユーザーによって提供されたこの回答は正しいです。

SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0);

ただし、onAttachが呼び出される前にフラグメント内の何かを取得しようとすると、getActivity()はnullを返します。

于 2014-02-06T15:54:21.307 に答える
3

次のようにフラグメントのSharedPrefencesinメソッドを作成できます。onAttach

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    SharedPreferences preferences = context.getSharedPreferences("pref", 0);
}
于 2018-01-24T09:17:08.453 に答える
2

これは私のためにトリックをしました

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());

こちらを確認してくださいhttps://developer.android.com/guide/topics/ui/settings.html#ReadingPrefs

于 2018-02-24T22:51:11.340 に答える
1

getActivity()そしてonAttach()、同じ状況で私を助け
なかったかもしれませんが、私は何か間違ったことをしたかもしれません
が!フラグメント内に
フィールドを作成し、 メソッドonCreateViewから現在のコンテキストを取得した別の決定を見つけました。これで、フラグメント から共有設定を操作できます 。Context thisContext

public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {   
...   
thisContext = container.getContext();   
...   
}
于 2018-08-26T21:12:37.103 に答える
1

フラグメントでプリファレンスを定義するには: SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR",Context.MODE_PRIVATE); editor.putString("credi_credito",cre); editor.commit();

別のアクティビティを呼び出すか、設定データをフラグメント化するには: SharedPreferences pref = getActivity().getSharedPreferences("CargaDatosCR", Context.MODE_PRIVATE); credit=pref.getString("credi_credito",""); if(credit.isNotEmpty)...

于 2019-07-19T16:33:20.533 に答える
1

多分これは数年後に誰かに役立つでしょう。Androidxで、SharedPreferences()フラグメント内に入る新しい方法は、に実装することですgradle dependencies

implementation "androidx.preference:preference:1.1.1"

次に、フラグメント呼び出し内

SharedPreferences preferences;
preferences = androidx.preference.PreferenceManager.getDefaultSharedPreferences(getActivity());
于 2020-10-09T17:44:38.653 に答える
1

フラグメントが与えられると、次のようにSharedPreferencesを設定できます。

val sharedPreferences = activity!!.applicationContext.getSharedPreferences(TAG,   Context.MODE_PRIVATE) // kotlin
SharedPreferences sharedPreferences = getActivity().getApplicationContext().getSharedPreferences(TAG,   Context.MODE_PRIVATE); // java

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2021-03-10T17:03:03.380 に答える
0

内からコンテキストを取得することが可能ですFragment

ただやる

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;
    }
}

AndroidViewModelアプリケーションコンテキストを返すメソッドを実装するonCreateViewメソッドにをアタッチすることもできます

public 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
     }
  }
于 2020-06-20T22:39:04.770 に答える
0

フラグメントkotlinでrequiredactivityを使用する

 val sharedPreferences = requireActivity().getSharedPreferences(loginmasuk.LOGIN_DATA, Context.MODE_PRIVATE)
于 2020-11-12T16:23:18.967 に答える
0

現在の日付と時刻を取得するか、そこからすべての属性を取得します。

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;

String timeStamp = new SimpleDateFormat( "dd/MM/yy   HH:mm:ss").format(Calendar.getInstance().getTime());

        String timeStamp1 = new SimpleDateFormat("dd/MM/yy").format(Calendar.getInstance().getTime());
        String timeStamp2 = new SimpleDateFormat("dd").format(Calendar.getInstance().getTime());
        System.out.print(timeStamp1);
        if(timeStamp1.contains("10/03/21")) {
            System.out.print("\ntrue");
        }
        else {
            System.out.print("false");
        }
于 2021-03-10T16:56:05.870 に答える