gpt4 book ai didi

java - 如何结束 Activity 并重置 SharedPreferences.Editor 值?

转载 作者:行者123 更新时间:2023-11-29 05:07:56 25 4
gpt4 key购买 nike

我正在使用 Android Studio 创建一个测验应用程序。我有一个 Activity 和寻呼机适配器,其中包含 3 个 fragment (问题)。当我回答所有问题时(我在下面编写的代码只检查第一个问题,只是为了不占用太多空间)并按下结束按钮,新 Activity 将打开并显示结果。但有时结果显示不正确。我怀疑我的 SharedPreferences.Editor 值在我开始测试 Activity 时不正确,所以我尝试在 Activity 启动后将其设置为 0。问题仍然存在。

可能是我在 fragment 中使用了错误的方法来发送结果(在本例中为 onStop(),但我也尝试过 onDetach、onDestroyView、onDestroy)。

我也尝试过将 editor.apply() 更改为 editor.commit() ,没有任何区别。

问题1.java

public class Question1 extends android.support.v4.app.Fragment {

private CheckBox cb1;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceStance) {
View v = inflater.inflate(R.layout.fragment_question1, null);
return v;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}


@Override
public void onStop() {
super.onStop();

cb1 = (CheckBox)getView().findViewById(R.id.checkBox1);

final SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor editor = app_preferences.edit();

if (cb1.isChecked()) {
editor.putInt("answer_value", 1);
} else {
editor.putInt("answer_value", 0);
}
editor.apply();
}

}

测试.java

public class testActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pager_adapter);
initialisePaging();
defaultValue();
}

private void defaultValue() {
final SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = app_preferences.edit();

editor.putInt("answer_value", 0);
editor.apply();
}

public void goResult(View view){
Intent intent = new Intent(testActivity.this, Result.class);
startActivity(intent);
}


private void initialisePaging() {
List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this,Qestion1.class.getName()));
fragments.add(Fragment.instantiate(this,Qestion2.class.getName()));
fragments.add(Fragment.instantiate(this,Question3.class.getName()));
PagerAdapter mPagerAdapter = new PagerAdapter(this.getSupportFragmentManager(), fragments);

Collections.shuffle(fragments, new Random(System.nanoTime()));

ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
pager.setAdapter(mPagerAdapter);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_greitas_testas, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;}
return super.onOptionsItemSelected(item);
}

}

结果.java

public class Result extends ActionBarActivity {

TextView win_lose;
int Ats1, Ats2, Ats3;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_result);
calculateResult();
}


private void calculateResult() {
win_lose = (TextView)findViewById(R.id.textView9);

final SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(this);

int Ans1 = app_preferences.getInt("answer_value", 0);

if ( Ans1 == 1 ){
win_lose.setText("Win");
} else {
win_lose.setText("Lose");
}

}

public void onBackPressed(){
Intent intent = new Intent(Result.this, mainActivity.class);
startActivity(intent);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_result, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}

PagerAdapter.java

public class PagerAdapter extends FragmentPagerAdapter {

private List<Fragment> fragments;

public PagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}

@Override
public Fragment getItem(int arg0) {
return this.fragments.get(arg0);
}

@Override
public int getCount() {
return this.fragments.size();
}

public void setFragments(List<Fragment> fragments) {
this.fragments = fragments;
}
}

最佳答案

如果我没看错,您将值保存为

editor.putInt("answer_value", 0);

但你正在阅读它

int Ans1 = app_preferences.getInt("atsakymo_vertė", 0);

保存键和读取键应该是一样的!

关于java - 如何结束 Activity 并重置 SharedPreferences.Editor 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29728683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com