как отправить содержимое ArrayList‹String› из класса в Fragment;

Я пытаюсь составить список Избранного.

я создаю класс 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;, объявленный в объявлении класса Favorite, который расширяется от Fragment.

все хорошо на этом шаге! , но в классе любимых фрагментов мой 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 ... )

Изменить:

поэтому я пробую эту ссылку.< /а>


person Saeid    schedule 01.08.2014    source источник
comment
не могли бы вы опубликовать код фрагмента?   -  person Haresh Chhelana    schedule 01.08.2014


Ответы (4)


Попробуйте этот способ, надеюсь, это поможет вам решить вашу проблему.

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();
person Haresh Chhelana    schedule 01.08.2014
comment
я пробую и возвращаю эту ошибку: E/AndroidRuntime (1337): java.lang.ClassCastException: java.lang.String нельзя преобразовать в java.lang.Boolean - person Saeid; 01.08.2014
comment
моя попытка: Baham_SharedPreferences settings=new Baham_SharedPreferences(getActivity()); предпочтения.getall(); ArrayList‹String› favList = new Baham_SharedPreferences(getActivity()).getall(); Toast.makeText(getActivity(), favList.get(0), 0).show(); - person Saeid; 01.08.2014

Пакеты могут принимать пользовательские классы, если они реализуют либо Parcelable, либо Serializable.

Например

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

Теперь fragment_one будет иметь доступ к данным в методе onCreate(Bundle bundleHoldingData).

person Paras Valera    schedule 01.08.2014
comment
и как я могу получить arraylist во фрагменте через Bundle? - person Saeid; 01.08.2014

Ваш метод getall() создает новый Favorite, вызывая new. Если Favorite действительно является Fragment, то он еще не прошел через onCreate, поэтому он не будет инициализирован.

person Larry Schiefer    schedule 01.08.2014

person    schedule
comment
Мы можем говорить здесь по-персидски? - person Saeid; 01.08.2014