【问题标题】:SharedPreferences write in fragment and read in activitySharedPreferences 在片段中写入并在活动中读取
【发布时间】:2017-03-14 08:29:38
【问题描述】:

SharedPreferences 有点问题。

我正在使用一个选项卡式活动,里面有一些片段。我里面有一个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...

【问题讨论】:

  • 让它统一,如果你使用PreferenceManager.getDefaultSharedPreferences(this),然后使用它。
  • 这个SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 必须相同。

标签: android listview android-fragments sharedpreferences


【解决方案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", "");  

【讨论】:

    【解决方案2】:

    您正在使用两种不同类型的首选项。 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();
    
    
        }
    
    });
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多