0

我正在尝试制作收藏夹列表。

我创建了一个存储真值的 SharedPreferences 类,然后我需要使用所有真值。

这是我的课:

public class Baham_SharedPreferences
{

private SharedPreferences prefs;

private static final String NAME = "pref";

public SharedPreferences(Context context) {
    prefs = context.getSharedPreferences(NAME, Context.MODE_PRIVATE);
}

public boolean getState(String key) {
    return prefs.getBoolean(key, false);
}
public void setState(String key, boolean value){
    Editor editor = prefs.edit();
    editor.putBoolean(key, value);
    editor.commit();
}

public void getall()
{
    Favorite favorite=new Favorite(); //Favorite is a fragment class
    favorite.fav_list=new ArrayList<String>();

    Map<String,?> keys = prefs.getAll();
    int i=0;
    for(Map.Entry<String,?> entry : keys.entrySet())
    {
        if (entry.getValue().toString()=="true")
        {
            favorite.fav_list.add(entry.getKey());
            Log.d("true value", favorite.fav_list.get(i));
            i++;
        }
    }
 }  
}

通过 getall() 我尝试ArrayList<String> fav_list;在从 Fragment 扩展的声明收藏夹类中声明的新公共。

一切都好到这一步!,但是在最喜欢的片段类中,我的fav_listArrayList 还为空-我以前使用过这种方式(但在活动中,而不是片段中)并且工作正常,但在片段类中不起作用;

首先,我调用 preferences.getall() 然后使用 ArrayList fav_list 但返回此错误:

E/AndroidRuntime(10015): FATAL EXCEPTION: main
E/AndroidRuntime(10015): java.lang.NullPointerException
E/AndroidRuntime(10015):    at baham.slidingmenu.Favorite.onCreateView(Favorite.java:52)
E/AndroidRuntime(10015):    at android.app.Fragment.performCreateView(Fragment.java:1695)
E/AndroidRuntime(10015):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
E/AndroidRuntime(10015):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
E/AndroidRuntime(10015):    at android.app.BackStackRecord.run(BackStackRecord.java:682)
E/AndroidRuntime(10015):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)

现在!,将 ArrayList 从一个类(例如:(public class SharedPreferencesn {...}不从任何东西扩展))传递给一个Fragment class

(For Example via : bundle.putStringArrayList(key, value) , intent.putExtras and ... )

编辑 :

所以,我试试这个链接。

4

4 回答 4

3

Bundles 可以接受自定义类,如果它们实现 Parcelable 或 Serializable..

例如

Bundle bundle = new Bundle();
bundle.putSerializable("MyData", data);
fragment_one.setArguments(bundle);

现在 fragment_one 将可以访问它的 onCreate(Bundle bundleHoldingData) 方法中的数据。

于 2014-08-01T12:27:55.223 回答
1

Try this way,hope this will help you to solve your problem.

public class Baham_SharedPreferences{
     private SharedPreferences prefs;
     private static final String NAME = "pref";

     public Baham_SharedPreferences(Context context) {
        prefs = context.getSharedPreferences(NAME, Context.MODE_PRIVATE);
     }

    public boolean getState(String key) {
       return prefs.getBoolean(key, false);
    }
    public void setState(String key, boolean value){
       SharedPreferences.Editor editor = prefs.edit();
       editor.putBoolean(key, value);
       editor.commit();
    }

    public ArrayList<String> getall(){
       ArrayList<String> fav_list=new ArrayList<String>();
       Map<String,?> keys = prefs.getAll();
       for(Map.Entry<String,?> entry : keys.entrySet()){
          if (entry.getValue().toString().equals("true")){
                fav_list.add(entry.getKey());
          }
       }
      return fav_list;
     }

}

Fragment

ArrayList<String> favList = new Baham_SharedPreferences(getActivity()).getall();
于 2014-08-01T12:14:39.577 回答
1

您的getall()方法是Favorite通过调用创建一个新的new. 如果Favorite真的是 aFragment那么它还没有通过它onCreate,所以它不会被初始化。

于 2014-08-01T12:11:14.480 回答
-1

你的代码有些部分我不明白。首先,您有一个很酷的 sharedpreferences 助手类,但是您的类不仅仅是放置和返回数据,而且它并不酷!您的班级想要处理两个完全分开的事情,这在面向对象编程中是不正确的。在 getAll 方法中,您定义了一个片段,但您什么也不做!我不明白为什么?如果你想要一个片段,你应该返回它,然后你可以将它传递给 fragmentManger 并以某种方式使用它。

我推荐的方法是不要在课堂上处理片段。只需将数据作为数组或数组列表返回。你也可以让你的类和里面的每个方法都是静态的!然后使用片段管理器(甚至从布局)将片段添加到应用程序,并在片段内部使用 getAll 方法并初始化所需的一切。

于 2014-08-01T12:10:58.283 回答