SharedPreferences写入片段并读入活动

时间:2017-03-14 08:29:39

标签: android listview android-fragments sharedpreferences

我对SharedPreferences有点问题。

我使用的是Tabbed Activity,里面有一些片段。我的内部有一个ListView,我希望获得selectedItem的ID。

我收到错误,无法找到错误。

我在Fragment上写了我的SharedPreferences:

listViewCours.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {

        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

            SharedPreferences.Editor editor = sharedPref.edit();

            long itemid= listViewCours.getItemIdAtPosition(i);

            String a = String.valueOf(itemid);

            editor.putString("ItemId",a);
            editor.commit();

        }

    });

然后我试图从Activity

中读取它
 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    String cours = prefs.getString("ItemId","");
    int cours_id = Integer.parseInt(cours);

我不知道该怎么做,但就目前而言,我无法在其他活动中获得该ID ...

2 个答案:

答案 0 :(得分:1)

设定值:

    SharedPreferences preferences =  getActivity().getSharedPreferences("AppPrefs", MODE_PRIVATE);
    SharedPreferences.Editor prefsEditor = preferences.edit();

    long itemid= listViewCours.getItemIdAtPosition(i);
    String a = String.valueOf(itemid);
    prefsEditor.putString("ItemId", a);

获得活动价值:

    SharedPreferences preferences =  getSharedPreferences("AppPrefs", MODE_PRIVATE);
    String ItemId=preferences.getString("ItemId", "");  

答案 1 :(得分:0)

您使用的是两种不同类型的偏好设置。 MODE_PRIVATE 默认共享首选项。这就是为什么你得到 NULL POINTER ERROR 的原因。试试下面的代码:

在listItem中使用:

listViewCours.setOnItemClickListener(new AdapterView.OnItemClickListener()
{

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

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

        long itemid= listViewCours.getItemIdAtPosition(i);

        String a = String.valueOf(itemid);

        prefs.edit().putString("ItemId",a).apply();


    }

});

希望这有帮助。