Java 共享首选项仅适用于第一次应用程序重启。第二次重新启动应用程序时,不会保留卡片视图标题
我已经创建了一个应用程序,它可以添加卡片,并在从用户输入姓名后在每张卡片上设置一个标题。为了在应用程序重启期间保留卡片和标题,我使用SharedReferences并将单个卡片标题保存在一个数组中。问题是在第一次应用程序重启后,卡片标题会保留,但在进一步应用程序重启后,卡片标题不会保留。虽然卡的数量仍然保留Java 共享首选项仅适用于第一次应用程序重启。第二次重新启动应用程序时,不会保留卡片视图标题,java,android,sharedpreferences,Java,Android,Sharedpreferences,我已经创建了一个应用程序,它可以添加卡片,并在从用户输入姓名后在每张卡片上设置一个标题。为了在应用程序重启期间保留卡片和标题,我使用SharedReferences并将单个卡片标题保存在一个数组中。问题是在第一次应用程序重启后,卡片标题会保留,但在进一步应用程序重启后,卡片标题不会保留。虽然卡的数量仍然保留 public class MainActivity extends AppCompatActivity { private CardView cardview;
public class MainActivity extends AppCompatActivity {
private CardView cardview;
private CardView cardview2;
private LinearLayout.LayoutParams layoutparams1;
private LinearLayout layout;
public SharedPreferences mSettings;
int mCount;
int i=0,j=0;
public TextView tv1;
public TextView tv4;
public TextView tv3;
String name;
String names[] = new String[10];
String key[] = {"A","B","C","D","F","G","H"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCount=0;
Button b1 = findViewById(R.id.button);
layout=findViewById(R.id.view);
tv1 = findViewById(R.id.textView);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
names[mCount] = tv1.getText().toString().trim();
mCount++;
saveName();
}
});
}
private void saveName() //Cardview-1 function to
{
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);
tv3 = new TextView(getApplicationContext());
tv3.setText(tv1.getText().toString().trim());
cardview.setRadius(30);
cardview.addView(tv3);
layout.addView(cardview);
}
private void saveName2() //Cardview 2 function
{
cardview2 = new CardView(getApplicationContext());
layoutparams1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutparams1.setMargins(18, 30, 18, 0);
cardview2.setLayoutParams(layoutparams1);
cardview2.setCardBackgroundColor(Color.WHITE);
cardview2.setMinimumHeight(400);
tv4 = new TextView(getApplicationContext());
mSettings = getSharedPreferences("APP_PREFERENCES", Context.MODE_PRIVATE);
name = mSettings.getString(key[j],"");
tv4.setText(name);
j++;
cardview2.setRadius(30);
cardview2.addView(tv4);
layout.addView(cardview2);
}
@Override
public void onPause() {
super.onPause();
mSettings = getSharedPreferences("APP_PREFERENCES", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = mSettings.edit();
editor.putInt("COUNT_CARDS", mCount);
for(int i=0; i<mCount; i++)
editor.putString(key[i],names[i]);
editor.commit();
}
@Override
public void onResume() {
super.onResume();
mSettings = getSharedPreferences("APP_PREFERENCES", Context.MODE_PRIVATE);
if(mSettings.contains("COUNT_CARDS"))
{
mCount = mSettings.getInt("COUNT_CARDS", 0);
for (int i=0; i<mCount; i++)
saveName2();
}
}
}
公共类MainActivity扩展了AppCompatActivity{
私人卡视图卡视图;
私人卡查看卡查看2;
private LinearLayout.LayoutParams layoutparams1;
私人线路布局;
公共共享参考设置;
国际计数;
int i=0,j=0;
公共文本视图tv1;
公共文本视图tv4;
公共文本视图tv3;
字符串名;
字符串名称[]=新字符串[10];
字符串键[]={“A”、“B”、“C”、“D”、“F”、“G”、“H”};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCount=0;
按钮b1=findViewById(R.id.按钮);
布局=findViewById(R.id.view);
tv1=findViewById(R.id.textView);
b1.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
names[mCount]=tv1.getText().toString().trim();
mCount++;
saveName();
}
});
}
私有void saveName()//Cardview-1函数
{
cardview=新的cardview(getApplicationContext());
layoutparams1=新建LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_父项,LinearLayout.LayoutParams.WRAP_内容);
layoutparams1.setMargins(18,30,18,0);
设置LayoutParams(layoutparams1);
cardview.setCardBackgroundColor(颜色:白色);
cardview.setMinimumHeight(400);
tv3=新文本视图(getApplicationContext());
tv3.setText(tv1.getText().toString().trim());
cardview.setRadius(30);
cardwiew.addView(tv3);
布局。添加视图(cardview);
}
私有void saveName2()//cardwiew 2函数
{
cardview2=新的CardView(getApplicationContext());
layoutparams1=新建LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_父项,LinearLayout.LayoutParams.WRAP_内容);
layoutparams1.setMargins(18,30,18,0);
cardview2.setLayoutParams(layoutparams1);
cardview2.setCardBackgroundColor(颜色:白色);
cardview2.设置最小高度(400);
tv4=新文本视图(getApplicationContext());
mSettings=getSharedReferences(“应用程序首选项”,Context.MODE\u PRIVATE);
name=mSettings.getString(键[j],“”);
tv4.setText(名称);
j++;
cardview2.设置半径(30);
cardview2.addView(tv4);
布局。添加视图(cardview2);
}
@凌驾
公共无效暂停(){
super.onPause();
mSettings=getSharedReferences(“应用程序首选项”,Context.MODE\u PRIVATE);
SharedReferences.Editor=mSettings.edit();
编辑:putInt(“计数卡”,mCount);
对于(int i=0;i无需在onPause()方法中存储每一张卡。我们只会在sharedPref中写入新卡,因为sharedPref中已经存在上一张卡。因此,当您尝试在循环中保存上一张卡时,出现了一个问题。(写入空白值)
public类MainActivity扩展了AppCompatActivity{
私人卡视图卡视图;
私人卡查看卡查看2;
private LinearLayout.LayoutParams layoutparams1;
私人线路布局;
公共共享参考设置;
国际计数;
int i=0,j=0;
公共文本视图tv1;
公共文本视图tv4;
公共文本视图tv3;
字符串名;
字符串名称[]=新字符串[10];
字符串键[]={“A”、“B”、“C”、“D”、“F”、“G”、“H”};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCount=0;
按钮b1=findViewById(R.id.按钮);
布局=findViewById(R.id.view);
tv1=findViewById(R.id.textView);
b1.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
names[mCount]=tv1.getText().toString().trim();
mCount++;
saveName();
}
});
}
私有void saveName()//Cardview-1函数
{
cardview=新的cardview(getApplicationContext());
layoutparams1=新建LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_父项,LinearLayout.LayoutParams.WRAP_内容);
layoutparams1.setMargins(18,30,18,0);
设置LayoutParams(layoutparams1);
cardview.setCardBackgroundColor(颜色:白色);
cardview.setMinimumHeight(400);
tv3=新文本视图(getApplicationContext());
tv3.setText(tv1.getText().toString().trim());
cardview.setRadius(30);
cardwiew.addView(tv3);
布局。添加视图(cardview);
saveInPref();
}
私有void saveInPref(){
mSettings=getSharedReferences(“应用程序首选项”,Context.MODE\u PRIVATE);
SharedReferences.Editor=mSettings.edit();
编辑:putInt(“计数卡”,mCount);
编辑器.putString(键[mCount-1],名称[mCount-1]);
editor.apply();
}
私有void saveName2()//cardwiew 2函数
{
cardview2=新的CardView(getApplicationContext());
<?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" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/view"
android:orientation="vertical"
android:layout_marginTop="200dp"
android:background="@color/cardview_dark_background">
</LinearLayout>
<EditText
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="40dp" />
</RelativeLayout>
public class MainActivity extends AppCompatActivity {
private CardView cardview;
private CardView cardview2;
private LinearLayout.LayoutParams layoutparams1;
private LinearLayout layout;
public SharedPreferences mSettings;
int mCount;
int i=0,j=0;
public TextView tv1;
public TextView tv4;
public TextView tv3;
String name;
String names[] = new String[10];
String key[] = {"A","B","C","D","F","G","H"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCount=0;
Button b1 = findViewById(R.id.button);
layout=findViewById(R.id.view);
tv1 = findViewById(R.id.textView);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
names[mCount] = tv1.getText().toString().trim();
mCount++;
saveName();
}
});
}
private void saveName() //Cardview-1 function to
{
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);
tv3 = new TextView(getApplicationContext());
tv3.setText(tv1.getText().toString().trim());
cardview.setRadius(30);
cardview.addView(tv3);
layout.addView(cardview);
saveInPref();
}
private void saveInPref() {
mSettings = getSharedPreferences("APP_PREFERENCES", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = mSettings.edit();
editor.putInt("COUNT_CARDS", mCount);
editor.putString(key[mCount-1],names[mCount-1]);
editor.apply();
}
private void saveName2() //Cardview 2 function
{
cardview2 = new CardView(getApplicationContext());
layoutparams1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutparams1.setMargins(18, 30, 18, 0);
cardview2.setLayoutParams(layoutparams1);
cardview2.setCardBackgroundColor(Color.WHITE);
cardview2.setMinimumHeight(400);
tv4 = new TextView(getApplicationContext());
mSettings = getSharedPreferences("APP_PREFERENCES", Context.MODE_PRIVATE);
name = mSettings.getString(key[j],"");
tv4.setText(name);
j++;
cardview2.setRadius(30);
cardview2.addView(tv4);
layout.addView(cardview2);
}
@Override
public void onResume() {
super.onResume();
mSettings = getSharedPreferences("APP_PREFERENCES", Context.MODE_PRIVATE);
if(mSettings.contains("COUNT_CARDS"))
{
mCount = mSettings.getInt("COUNT_CARDS", 0);
for (int i=0; i<mCount; i++)
saveName2();
}
}
}