как сохранить видимость андроид - PullRequest
2 голосов
/ 29 октября 2019

Я попытался сохранить состояние видимости моих просмотров карт, сначала у меня исчезли просмотры, но если пользователь нажмет кнопку, откроется вид карт. Может ли кто-нибудь помочь мне и сказать мне, как я могу сохранить видимость, я не могу найти ничего по этой теме

Большое вам спасибо.

Я пробовал shardPrefs, но он не работает

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    cv1= (CardView) findViewById(R.id.cv1);
    cv2= (CardView) findViewById(R.id.cv2);
    cv3= (CardView) findViewById(R.id.cv3);
    cv4= (CardView) findViewById(R.id.cv4);
    cv5= (CardView) findViewById(R.id.cv5);
    cv6= (CardView) findViewById(R.id.cv6);
    cv7= (CardView) findViewById(R.id.cv7);
    cv8= (CardView) findViewById(R.id.cv8);
    cv9= (CardView) findViewById(R.id.cv9);

    AddBar = findViewById(R.id.AddBar);
    AddVoorraad =findViewById(R.id.AddVoorraad);

    AddBar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            clickcount = clickcount + 1;



            if (clickcount == 1) {

                cv1.setVisibility(View.VISIBLE);




            }

            if (clickcount == 2) {
                cv2.setVisibility(View.VISIBLE);
            }


            if (clickcount == 3) {
                cv3.setVisibility(View.VISIBLE);


            }
            if (clickcount == 4) {
                cv4.setVisibility(View.VISIBLE);


            }

            if (clickcount == 5) {
                cv5.setVisibility(View.VISIBLE);
            }


            if (clickcount == 6) {
                cv6.setVisibility(View.VISIBLE);


            }

            if (clickcount==7 ){
                cv7.setVisibility(View.VISIBLE);


            }

        }

    });

    AddVoorraad.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            clickcountV=clickcountV+1;

            if (clickcountV==1) {
                cv8.setVisibility(View.VISIBLE);


            }

            if (clickcount==2) {
                cv9.setVisibility(View.VISIBLE);
            }

        }
    });

    cv1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    cv2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    cv3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });


}

} `

Ответы [ 3 ]

0 голосов
/ 29 октября 2019

Я не знаю, что именно вы пытались, но если все, что вы хотите сделать, это сохранить состояние для последующего использования, вы, безусловно, можете сделать это с помощью SharedPreferences. Вы можете сделать что-то вроде этого, чтобы сохранить состояние в виде строки, представляющей состояние:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences();
SharedPreferences.Editor editor = prefs.edit();  
editor.putString("cv1_visibility", "VISIBLE");
editor.putString("cv2_visibility", "INVISIBLE");
editor.putString("cv3_visivility", "GONE");
...
editor.commit();

, а затем вы можете прочитать эти значения следующим образом:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences();
String cv1_state = prefs.getString("cv1_visibility", "NOT_FOUND");
String cv2_state = prefs.getString("cv2_visibility", "NOT_FOUND");
String cv3_state = prefs.getString("cv3_visibility", "NOT_FOUND");
...

и затем обработать его соответствующим образомна основании состояния в начале вашей деятельности. Обратите внимание, что getString() имеет параметр defValue (второй), который является значением, возвращаемым, если предпочтения не существует.

РЕДАКТИРОВАТЬ: Вы можете сохранить их как int, но помните, что некоторые из этих констант не являются int. Взгляните на это, чтобы понять, что я имею в виду: https://developer.android.com/reference/android/view/View

0 голосов
/ 30 октября 2019

Вы можете извлечь значение из onSaveInstanceState, когда конфигурация изменяется (ротация), но когда вы закрываете свое приложение (кнопка «Назад»), вам необходимо извлечь состояние из постоянного хранилища, как общие настройки.

0 голосов
/ 29 октября 2019

Попробуйте сохранить видимость для каждого CardView внутри SharedPrefs при условии. И получить их и установить во время инициализации CardView. Проверьте ниже код:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

int isVisible = sharedPreferences.getInt("cv1", View.GONE);
cv1.setVisibility(isVisible);
isVisible = sharedPreferences.getInt("cv2", View.GONE);
cv2.setVisibility(isVisible);
isVisible = sharedPreferences.getInt("cv3", View.GONE);
cv3.setVisibility(isVisible);
isVisible = sharedPreferences.getInt("cv4", View.GONE);
cv4.setVisibility(isVisible);
isVisible = sharedPreferences.getInt("cv5", View.GONE);
cv5.setVisibility(isVisible);
isVisible = sharedPreferences.getInt("cv6", View.GONE);
cv6.setVisibility(isVisible);
isVisible = sharedPreferences.getInt("cv7", View.GONE);
cv7.setVisibility(isVisible);
isVisible = sharedPreferences.getInt("cv8", View.GONE);
cv8.setVisibility(isVisible);
isVisible = sharedPreferences.getInt("cv9", View.GONE);
cv9.setVisibility(isVisible);

AddBar.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        clickcount = clickcount + 1;

        if (clickcount == 1) {

            cv1.setVisibility(View.VISIBLE);
            sharedPreferences.edit().putInt("cv1", View.VISIBLE).commit();
        }

        if (clickcount == 2) {
            cv2.setVisibility(View.VISIBLE);
            sharedPreferences.edit().putInt("cv2", View.VISIBLE).commit();
        }

        if (clickcount == 3) {
            cv3.setVisibility(View.VISIBLE);
            sharedPreferences.edit().putInt("cv3", View.VISIBLE).commit();
        }

        if (clickcount == 4) {
            cv4.setVisibility(View.VISIBLE);
            sharedPreferences.edit().putInt("cv4", View.VISIBLE).commit();
        }

        if (clickcount == 5) {
            cv5.setVisibility(View.VISIBLE);
            sharedPreferences.edit().putInt("cv5", View.VISIBLE).commit();
        }

        if (clickcount == 6) {
            cv6.setVisibility(View.VISIBLE);
            sharedPreferences.edit().putInt("cv6", View.VISIBLE).commit();
        }

        if (clickcount==7 ){
            cv7.setVisibility(View.VISIBLE);
            sharedPreferences.edit().putInt("cv7", View.VISIBLE).commit();
        }
    }
});

AddVoorraad.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        clickcountV=clickcountV+1;

        if (clickcountV==1) {
            cv8.setVisibility(View.VISIBLE);
            sharedPreferences.edit().putInt("cv8", View.VISIBLE).commit();
        }

        if (clickcountV==2) {
            cv9.setVisibility(View.VISIBLE);
            sharedPreferences.edit().putInt("cv9", View.VISIBLE).commit();
        }

    }
});
...