0

В одном из своих фрагментов, сохраняю нажатый элемент :

private void saveFavorites(int position) {
    String name = personCategories.get(position);
    SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.putString("Favorites", name);
    editor.apply();
}

После чего в другмо фрагменте пытаюсь отобразить значение, которое сохранил, подскажите пожалуйста как можно его отобразить, код второго фрагмента:

public class FavoritesFragment extends BaseFragment {
TextView someText;

public FavoritesFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    return inflater.inflate(R.layout.favorites_fragment, container, false);
//        someText.getText(getFavorites());
}

private void getFavorites() {
    SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
    String name = sp.getString("Favorites", null);
}
Inkognito
  • 911

1 Answers1

1

Вам надо после загрузки разметки найти в ней нужную вьюху и в неё присвоить нужное значение в виде текста. Вы же пытались получить текст из неинициализированной вьюхи, с помощью несуществующего метода, да ещё и передав туда аргумент со значением void, да ещё и после завершения метода. Т.е. вы в одной строке допустили 3 ошибки компиляции, 1 логическую ошибку и одну ошибку в рантайме (NPE)

Исправьте код так:

public class FavoritesFragment extends BaseFragment {

    TextView someText;

    public FavoritesFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.favorites_fragment, container, false);
        someText = v.findViewById(R.id.ТУТ_ID_ТЕКСТОВОГО_ПОЛЯ_ИЗ_РАЗМЕТКИ_ФРАГМЕНТА);
        someText.setText(getFavorites());
        return v;
    }

    private String getFavorites() {
        SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
        return sp.getString("Favorites", "ПУСТАЯ СТРОКА В ПРЕФАХ");
    }

}
  • 1
    getFavorites(), не смотря на название, ничего не возвращает. – post_zeew Jan 03 '17 at 16:22
  • Заменил, с изменениями в someText = (TextView) v.findViewById(R.id.textView); но всё равно в строчке где пытаюсь сэтить текст пишет can't resolve method setText(void); – Inkognito Jan 03 '17 at 16:26
  • Да, действительно) Проглядел вторую ошибку компиляции) Исправил в ответе. – ЮрийСПб Jan 03 '17 at 16:27
  • @Inkognito, ваше сообщение неинформативно. Если бы вы написали с какой ошибкой и на какой строке упало - можно было бы вам помочь. Скорее всего у вас NPE, т.к. в раметке нет текстового поля с нужным ID – ЮрийСПб Jan 03 '17 at 16:34
  • @ЮрийСПб @ЮрийСПб Вроде как помогло) но завалилось в другом месте NullPointerException: Attempt to invoke interface method 'void com.vm.sai.adapters.PersonAdapter$OnRecItemClickListener.onRecItemClick(int)' on a null object reference at com.vm.sai.adapters.PersonAdapter$PersonViewHolder.onClick(PersonAdapter – Inkognito Jan 03 '17 at 16:38
  • 1
    @Inkognito, попробуйте отдельный вопрос задать. А так у вас обычная NPE. Вот тут почитайте: http://ru.stackoverflow.com/questions/511085/%D0%A7%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-null-pointer-exception-%D0%B8-%D0%BA%D0%B0%D0%BA-%D0%B5%D0%B3%D0%BE-%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C – ЮрийСПб Jan 03 '17 at 16:40