在片段中加载preferenceactivity值错误

时间:2013-09-08 01:22:51

标签: android android-fragments sharedpreferences android-preferences

我在以下代码中的getDefaultSharedPreferences收到错误。我怎么解决这个问题?我试图从我的PreferenceActivity加载prefUsername的edittext值。我尝试使用getSharedPreferences,但返回 null ,因为PreferenceActivity将其数据存储在DefaultSharedPreferences中。任何帮助都是适当的。

错误是: The method getDefaultSharedPreferences(Context) in the type PreferenceManager is not applicable for the arguments (RunawayFragment)

全班:

public class RunawayFragment extends DialogFragment {

public static RunawayFragment newInstance() {
    RunawayFragment f = new RunawayFragment();
    return f;
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    if (getDialog() != null) {
        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);
    }

    View root = inflater.inflate(R.layout.runaway_fragment, container, false);
    return root;
}

@SuppressLint("NewApi")
@Override
public void onStart() {
    super.onStart();

    // User Picture
    final SharedPreferences sharedPreference = this.getActivity().getSharedPreferences("pref_key", Context.MODE_PRIVATE);
    String picturePath = sharedPreference.getString("img_path", null);
    ImageView imageView = (ImageView) getView().findViewById(R.id.imageView1);
    imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));

    //User Name
    SharedPreferences sharedPrefs = PreferenceManager
            .getDefaultSharedPreferences(RunawayFragment.this);
    String getUsernameText = sharedPreference.getString("prefUsername", null);
    TextView setUsername = (TextView) getView().findViewById(R.id.username); 
    setUsername.setText(getUsernameText);

    // change dialog width
    if (getDialog() != null) {

        int fullWidth = getDialog().getWindow().getAttributes().width;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
            Display display = getActivity().getWindowManager().getDefaultDisplay();
            Point size = new Point();
            display.getSize(size);
            fullWidth = size.x;
        } else {
            Display display = getActivity().getWindowManager().getDefaultDisplay();
            fullWidth = display.getWidth();
        }

        final int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources()
                .getDisplayMetrics());

        int w = fullWidth - padding;
        int h = getDialog().getWindow().getAttributes().height;

        getDialog().getWindow().setLayout(w, h);
    }
}

}

1 个答案:

答案 0 :(得分:7)

您需要将上下文传递给getDefaultSharedPreferences(),您可以通过调用getActivity()来获取该上下文。

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