好吧,我只是在测试共享首选项的想法以保存用户进度,但是这个简单的代码不起作用,当我通过 lev1 它应该更新 preffile 以便在下一个应用程序启动时它应该直接打开到 lev2Activity,一切没关系,即使 log cat 是干净的,但什么也没有发生,我不知道我的代码有什么问题,我们将不胜感激。
主 Activity .java
private Button b1;
public static final String levstate= "levstate";
private Context mycontext;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mycontext= this;
b1= (Button) findViewById(R.id.b1);
b1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
MainActivity.savelevstate(1, mycontext);
Intent i= new Intent(MainActivity.this, Lev1Activity.class);
startActivity(i);
}
});
}
public static void savelevstate(int state, Context mycontext)
{
SharedPreferences pref= mycontext.getSharedPreferences("preffile", MODE_APPEND);
Editor editor= pref.edit();
editor.putInt("levstate", state);
editor.commit();
}
public static int getlevstate(Context mycontext)
{
SharedPreferences pref= mycontext.getSharedPreferences("preffile", MODE_APPEND);
int state= pref.getInt("levstate", 1);
return state;
}
Lev1Activity.java
私有(private) EditText et1; 私有(private)按钮 b1;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lev1);
et1= (EditText) findViewById(R.id.et1);
b1= (Button) findViewById(R.id.b1);
}
public void Next (View v)
{
String value= et1.getText().toString();
int finalvalue= Integer.parseInt(value);
if(finalvalue==22)
{
Intent i = new Intent (this, Lev2Activity.class);
startActivity(i);
MainActivity.savelevstate(2, this);
this.finish();
}
}
最佳答案
您使用 sharedPreferences
的想法很棒。但是,如果您查看 MainActivity 的 onCreate()
,您会发现在启动 Intent 之前您从不检查最后一级状态。应用程序运行,用户点击按钮“b1”,它立即启动 Lev1Activity
。假设您希望在用户按下同一按钮时启动正确的关卡,您必须检查当前关卡状态,然后将该状态链接到其适当的关卡 Activity。
例如(MainActivity.java):
b1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
Intent i;
switch(getlevstate(myContext)) {
case 1:
i = new Intent(myContext, Lev1Activity.class);
break;
case 2:
i = new Intent(myContext, Lev2Activity.class);
break;
case 3:
i = new Intent(myContext, Lev3Activity.class);
break;
case 4
i = new Intent(myContext, Lev4Activity.class);
break;
...
}
startActivity(i);
}
});
使用 MODE_APPEND
应该和使用 MODE_PRIVATE
一样有效,但是建议使用后者。
关于java - 更新 android 中的共享首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32060380/