Nano Hash - криптовалюты, майнинг, программирование

Кнопка переключения возвращается после перезапуска приложения

У меня есть recyclerView, и у меня есть около 5 карточек с кнопками-переключателями на каждом из них, поэтому, когда я нажимаю на них, они отлично работают, скажем (вкл., выкл.), но проблема в том, что когда я перезапускаю приложение, эти кнопки-переключатели, которые я решил включить отключается, я пробовал с sharedpereference, но это не сработало, так что вот мой код, может кто-нибудь помочь, и спасибо

public class MyAdapter extends RecyclerView.Adapter<MyHolder>{

Context c;
String[] players;
String[] positions;
int[] images;





public MyAdapter(Context ctx,String[] players,String[] positions,int[] images)
{
    this.c=ctx;
    this.players=players;
    this.positions=positions;
    this.images=images;

}
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.model,null);

    MyHolder holder=new MyHolder(v);
    SharedPreferences sharedPrefs = c.getSharedPreferences("com.example.xyz", MODE_PRIVATE);
    holder.fav.setChecked(sharedPrefs.getBoolean("NameOfThingToSave", true));
    return holder;
}


@Override
public void onBindViewHolder(final MyHolder holder, final int position) {



    holder.nameTxt.setText(players[position]);
    holder.posTxt.setText(positions[position]);
    holder.img.setImageResource(images[position]);
    // holder.fav.setChecked(false);

  // holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off));
    holder.fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (holder.fav.isChecked())
            {
                SharedPreferences.Editor editor = c.getSharedPreferences("com.example.xyz", MODE_PRIVATE).edit();
                editor.putBoolean("NameOfThingToSave", true);
                editor.commit();
            }
            else
            {
                SharedPreferences.Editor editor = c.getSharedPreferences("com.example.xyz", MODE_PRIVATE).edit();
                editor.putBoolean("NameOfThingToSave", false);
                editor.commit();
            }
            if (isChecked)
                holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c,R.drawable.star_light));
            else
                holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off));
        }
    });


    holder.setItemClickListener(new ItemClickListener() {
        @Override
        public void onItemClick(View v, int pos) {

            Intent i=new Intent(c,DetailActivity.class);

            i.putExtra("Name",players[position]);
            i.putExtra("Position",positions[position]);
            i.putExtra("Image",images[position]);

            c.startActivity(i);

        }
    });

}

@Override
public int getItemCount() {
    return players.length;
}

  • Я не вижу никаких sharedpreferences. 30.08.2017
  • я удалил, потому что это не сработало 30.08.2017
  • Если вы хотите сохранить состояние вашего приложения, вы должны использовать database или sharedprefs 30.08.2017
  • проверьте общие настройки 30.08.2017

Ответы:


1

Можете ли вы поделиться своей реализацией общих настроек, чтобы мы могли ее исправить?

Этот код показывает только то, как вы представляете свои данные в пользовательском интерфейсе, но не сохраняет состояние проверки.

Вам нужно как-то сохранить состояния проверки и загрузить их при запуске приложения. Есть несколько простых решений. Поэтому вам нужно составить список объектов, где каждый объект содержит ваши соответствующие данные, включая статус проверки, и сохранить этот список в общих префах или любом другом хранилище данных. Или вы можете просто сохранить отдельно для каждого состояния кнопки, если ваше количество кнопок постоянно. (chk1=true, chk2=false и т. д.) Но я бы не рекомендовал это решение, потому что оно не адаптируется к динамическому изменению количества элементов.

30.08.2017
  • NameOfThingToSave должен быть уникальным для каждого элемента. А также в onBindViewHolder вы устанавливаетеholder.fav.setChecked(false); Должно быть что-то вродеholder.fav.setChecked(sharedPrefs.getBoolean(NameOfThingToSave, true)); или еще лучше загрузить все данные из общих префов в список объектов перед отправкой их в адаптер, а в статусе загрузки адаптера из объекта и при изменении статуса проверки просто измените состояние объекта и сохраните новое состояние в общих префах 30.08.2017
  • так что я поставилholder.fav.setChecked(sharedPrefs.getBoolean(NameOfThingToS‌​ave, true)); в onCreateViewHolder и когда происходит щелчок editor.putBoolean(NameOfThingToSave, false); или правда ничего не изменилось 31.08.2017
  • хорошо, это работает, но не работает с позицией, все да или все нет: S 31.08.2017
  • Вместо жестко заданной строки NameOfThingToS‌​‌​поместите везде что-то вроде (ключ+позиция) и повторите попытку. 31.08.2017

  • 2

    Вы используете "com.example.xyle" для чтения настроек и "com.example.xyz" для их сохранения. Вы должны использовать одну и ту же строку в обоих случаях.

    Обновить

    Вы должны удалить holder.fav.setChecked(false); из onBindViewHolder, так как вы установили его на onCreateViewHolder.

    30.08.2017
  • да, плохо, я изменил это, но это то же самое, что не работает, спасибо, подумал 30.08.2017
  • я сделал это, но до сих пор sharepreference не сохраняет мой проверенный 31.08.2017
  • хорошо, это работает, но не работает с позицией, все да или все нет: S 31.08.2017

  • 3

    Использовать эту общую настройку для набора

    SharedPreferences sharedPreferences = PreferenceManager
                .getDefaultSharedPreferences(Activity);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean("KEY, true/false);
        editor.commit();
    

    Для получения

    SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(context);
        boolean check=prefs.getBoolean(fieldName, false);
    
    30.08.2017
  • как это поможет мне сохранить состояние кнопки 30.08.2017
  • Когда вы проверяете кнопку, чем setCheck (true) и сохраняете в ArrayList‹test›, поэтому, когда вы вернетесь в свое приложение, получите ArrayList и установите, как вы установили. Также общие настройки помогают мне. , логическое значение) { SharedPreferences sharedPreferences = PreferenceManager .getDefaultSharedPreferences(context); Редактор SharedPreferences.Editor = sharedPreferences.edit(); editor.putBoolean (ключ, значение); редактор.коммит(); } 30.08.2017
  • тем не менее это ничего не делает в onCreate в основной активности или адаптере onCreate, как приложение запомнит состояние, это просто для проверки 30.08.2017
  • используйте выше общие настройки, это должно помочь вам 30.08.2017
  • поместите мои общие предпочтения в другой класс, а затем используйте, я уже использовал этот код 30.08.2017
  • Класс MyHolder Класс MainActivity..? 30.08.2017
  • не понял что ты хочешь сказать 30.08.2017
  • создайте еще один класс в своем пакете, поместите мой код и используйте 30.08.2017
  • поэтому после добавления вашего класса и использования набора и получения от него того, что насчет общего предпочтения, он дает мне мой сохраненный клик onCreateViewholder 31.08.2017
  • используйте только общие настройки для этого 31.08.2017
  • хорошо, это работает, но не работает с позицией, все да или все нет: S 31.08.2017
  • 1 кнопка-переключатель на каждом виде карты или строке 31.08.2017
  • Снимок кода -- getPosition = (Integer) buttonView.getTag(); // Здесь мы получаем положение, которое мы установили для флажка с помощью setTag. arrayList.get(getPosition).setSelection(buttonView.isChecked()); // Установите значение флажка, чтобы сохранить его состояние. если (проверено) { checkBoxCounter++; } еще { checkBoxCounter--; } } }); 31.08.2017
  • stackoverflow.com/questions/45979628/ 31.08.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..