如何保存可见性 android
how to save Visibility android
我试图保存我的卡片视图的可见性状态,起初我的视图消失了,但如果用户按下按钮,卡片视图就会显示出来。有人可以帮助我并告诉我如何存储可见性,我找不到关于这个主题的任何内容
非常感谢。
我尝试了 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) {
}
});
}
}`
尝试根据条件在 SharedPrefs
中存储每个 CardView
的可见性。并在 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();
}
}
});
我不知道您究竟尝试了什么,但如果您只想存储状态以备后用,您当然可以使用 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");
...
然后根据你activity开始时的状态适当处理。请注意,getString()
有一个 defValue
参数(第二个),如果首选项不存在,它是 return 的值。
编辑:您可以选择将它们存储为 int,但请注意其中一些常量不是 int。看看这个,看看我的意思:https://developer.android.com/reference/android/view/View
您可以在配置更改(旋转)时从 onSaveInstanceState 检索值,但是当您关闭应用程序(后退按钮)时,您需要从持久性存储中检索状态,例如共享首选项。
我试图保存我的卡片视图的可见性状态,起初我的视图消失了,但如果用户按下按钮,卡片视图就会显示出来。有人可以帮助我并告诉我如何存储可见性,我找不到关于这个主题的任何内容
非常感谢。
我尝试了 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) {
}
});
}
}`
尝试根据条件在 SharedPrefs
中存储每个 CardView
的可见性。并在 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();
}
}
});
我不知道您究竟尝试了什么,但如果您只想存储状态以备后用,您当然可以使用 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");
...
然后根据你activity开始时的状态适当处理。请注意,getString()
有一个 defValue
参数(第二个),如果首选项不存在,它是 return 的值。
编辑:您可以选择将它们存储为 int,但请注意其中一些常量不是 int。看看这个,看看我的意思:https://developer.android.com/reference/android/view/View
您可以在配置更改(旋转)时从 onSaveInstanceState 检索值,但是当您关闭应用程序(后退按钮)时,您需要从持久性存储中检索状态,例如共享首选项。