如何将ArrayList <string>内容从一个类发送到Fragment; </string>

时间:2014-08-01 11:48:35

标签: android android-intent android-fragments arraylist android-bundle

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

我创建一个存储真值的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()我尝试在声明从Fragment扩展的Favorite类中声明的New public ArrayList<String> fav_list;

这一步都很好! ,但是在Favorite片段类中,我的fav_list ArrayList是空的 - 我之前使用这种方式(但是在活动中,而不是片段)并且正常工作但在片段类中不起作用;

首先,我调用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 ... )

修改:

所以,我试试this link.

4 个答案:

答案 0 :(得分:3)

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

例如

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

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

答案 1 :(得分:1)

您的getall()方法通过调用Favorite创建新的new。如果Favorite确实是Fragment,那么它将不会通过其onCreate,因此它不会被初始化。

答案 2 :(得分:1)

请尝试这种方式,希望这有助于您解决问题。

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

}

<强>片段

ArrayList<String> favList = new Baham_SharedPreferences(getActivity()).getall();

答案 3 :(得分:-1)

您的代码中有一些我不理解。首先,你有一个很酷的共享优先助理课程,但你的课程不仅仅是放置和返回数据而且还不酷!你的类想要处理两个完全分离的东西,这在面向对象的编程中是不对的。 在getAll方法中你定义了一个片段,但你什么也没做!我不明白为什么?如果你想要一个片段,你应该返回它,之后你可以将它传递给fragmentManger并以某种方式使用它。

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