Java 如何结束活动并重置SharedReferences.Editor值?

Java 如何结束活动并重置SharedReferences.Editor值?,java,android,android-fragments,android-activity,Java,Android,Android Fragments,Android Activity,我正在用Android studio创建一个测验应用程序。我有一个活动和寻呼机适配器,其中包含3个片段(问题)。当我回答所有问题(我在下面编写的代码只检查第一个问题,只是为了不占用太多空间)并按下“结束”按钮时,新活动将打开并显示结果。但有时结果显示不正确。我怀疑启动测试活动时SharedReferences.Editor的值不正确,因此我尝试在启动活动后将其设置为0。问题仍然存在 可能是我在片段中使用了错误的方法来发送结果(在本例中是onStop(),但我也尝试了ondeach、onDestr

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

可能是我在片段中使用了错误的方法来发送结果(在本例中是onStop(),但我也尝试了ondeach、onDestroyView和onDestroy)

我还尝试将编辑器.apply()更改为编辑器.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();
    }

}
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);
    }

}
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);
    }
}
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;
    }
}
Test.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();
    }

}
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);
    }

}
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);
    }
}
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;
    }
}
PagerAdapter.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();
    }

}
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);
    }

}
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);
    }
}
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;
    }
}
公共类PagerAdapter扩展了FragmentPagerAdapter{
私有列表片段;
公共页面编辑器(碎片管理器fm,列出碎片){
超级(fm);
this.fragments=片段;
}
@凌驾
公共片段getItem(int arg0){
返回此.fragments.get(arg0);
}
@凌驾
public int getCount(){
返回此.fragments.size();
}
公共void setFragments(列出片段){
this.fragments=片段;
}
}

如果我看得正确,您将值另存为

editor.putInt("answer_value", 0);
但你读它是因为

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

保存和读取的键应该是相同的

您可以尝试在某处注册一个SharedReferences侦听器,然后在触发该活动时将其解除

final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
final SharedPreferences.OnSharedPreferenceChangeListener listener;
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
       if(key.equals("answer_value")) {
          prefs.unregisterListener(listener);
          finish();
       }
   }
};
prefs.registerListener(listener);

解决了!结果我需要使用onPause()方法。我还将编辑器.apply()更改为编辑器.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 onPause() {
        super.onPause();

        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.commit();
    }

}
 private void defaultValue() {
            final SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(this);
            SharedPreferences.Editor editor = app_preferences.edit();
            editor.putInt("answer_value", 0);
//This is changed from editor.apply():
            editor.commit();
        }
我还更改了活动的代码,如下所示Test.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 onPause() {
        super.onPause();

        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.commit();
    }

}
 private void defaultValue() {
            final SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(this);
            SharedPreferences.Editor editor = app_preferences.edit();
            editor.putInt("answer_value", 0);
//This is changed from editor.apply():
            editor.commit();
        }

请将您的
PagerAdapter
,请注意,我认为这是导致此问题的原因。对不起,这是我的错误。我改变了语言,以便大家都能理解。在我的实际代码中,值是相同的,所以这不是问题所在。