Я застрял в том, как я могу использовать sharedpreferences, чтобы сохранить состояние просмотра моей карты после перезапуска приложения?Пожалуйста, предложите код, если это возможно - PullRequest
0 голосов
/ 21 сентября 2019

enter image description here enter image description here

  public class MainActivity extends AppCompatActivity {
    private CardView cardview;
    private LinearLayout.LayoutParams layoutparams1;
    private RelativeLayout layout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b1 = findViewById(R.id.button);
        layout=findViewById(R.id.layout);

// Нажатие кнопки добавит карту

        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cards();
            }
        });
    }

// Функциячтобы добавить плитки cardview.Эта функция добавит плитку вида карты

    private void cards()
    {
        cardview = new CardView(getApplicationContext());
        layoutparams1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 
        LinearLayout.LayoutParams.WRAP_CONTENT);
        layoutparams1.setMargins(18, 30, 18, 0);
        cardview.setLayoutParams(layoutparams1);
        cardview.setCardBackgroundColor(Color.WHITE);
        cardview.setMinimumHeight(400);
        cardview.setRadius(30);
        layout.addView(cardview);
    }
}

// XML-файл для того же файла упомянут ниже и содержит всего одну кнопку в относительном макете:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:id="@+id/layout"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Save"
        android:id="@+id/button"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp" />
</RelativeLayout>

// --------------------------------------- // ОБНОВЛЕНИЕ № 2 После реализации onPause () иМетод onResume ------------------------------- //

public class MainActivity extends AppCompatActivity {
    private CardView cardview;
    private LinearLayout.LayoutParams layoutparams1;
    private RelativeLayout layout;
    public SharedPreferences mSettings;
    int mCount;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mSettings = getSharedPreferences("APP_PREFERENCES", Context.MODE_PRIVATE);
        mCount = 0;

        Button b1 = findViewById(R.id.button);
        layout=findViewById(R.id.layout);

        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mCount++;
                cards();
            }
        });
    }

    private void cards()
    {
        cardview = new CardView(getApplicationContext());
        layoutparams1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        layoutparams1.setMargins(18, 30, 18, 0);
        cardview.setLayoutParams(layoutparams1);
        cardview.setCardBackgroundColor(Color.WHITE);
        cardview.setMinimumHeight(400);
        cardview.setRadius(30);
        layout.addView(cardview);
    }

    @Override
    public void onPause() {
        super.onPause();
        SharedPreferences.Editor editor = mSettings.edit();
        editor.putInt("COUNT_CARDS", mCount);
        editor.apply();
    }

    @Override
    public void onResume() {
        super.onResume();
        if(mSettings.contains("COUNT_CARDS")) {
            mCount = mSettings.getInt("COUNT_CARDS", 0);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 21 сентября 2019

Если вы просто хотите сохранить количество карт, вы можете использовать SharedPrefernces.Примерно так: Это ваше поле класса активности

SharedPreferences mSettings = getSharedPreferences("APP_PREFERENCES", Context.MODE_PRIVATE);
int mCount = 0;

Добавить счетчик для прослушивания щелчка

b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               mCount++;
                cards();
            }
        });

Сохранить счетчик в SharedPreferences в onPause ()

Editor editor = mSettings.edit();
editor.putInt("COUNT_CARDS", mCount);
editor.apply();

Прочитайте из SharedPreferences в onResume ()

if(mSettings.contains("COUNT_CARDS")) {
    mCount = mSettings.getInt("COUNT_CARDS", 0);
}

Затем добавьте столько карт к вашему размеру "count" разметки.Но если вы хотите сохранить более сложные данные, вы должны использовать базу данных.Взгляните на Комната

0 голосов
/ 21 сентября 2019

Я нахожусь на мобильном телефоне, поэтому не могу поделиться кодом, но я попытаюсь дать вам решение.

Первым делом в первую очередь следует использовать общие предпочтения для хранения небольших фрагментов данных, а не всей базы данных.

Переопределите onStop или onPause (в зависимости от ваших потребностей) и сохраните любые данные, которые вы хотите сохранить.

А затем внутри onCreate или onResume и извлеките эти данные из SharedPreferences и добавьте их в свой список.

Вы также должны помнить, что если вы делаете это с помощью onPause (хранить) и onResume (извлекать), ваш список не будет уничтожен, поэтому вы можете получить дубликаты с элементами в списке.

...