RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 812340
Accepted
Алексей Ефимов
Алексей Ефимов
Asked:2020-04-11 02:28:42 +0000 UTC2020-04-11 02:28:42 +0000 UTC 2020-04-11 02:28:42 +0000 UTC

如何在屏幕翻转(Android Studio)上保持方法结果?

  • 772

再会。遇到这样的问题(我在Android. Programming for Professionals. 3rd edition - 卡在第5章的最后一个任务上练习):下面是一个允许用户窥视一个简单问题的正确答案的类。查看提示后,当返回问题并点击正确答案时,用户会看到“作弊不好”的字样。问题是在这个类中你需要保存结果——用户是否窥探到答案,这样当手机屏幕翻转时,这个指示器不会被重置。我不明白该怎么做。究竟需要保存什么?我试图在代码位置替换值 mAnswerIsTrue -> (________) - 但这并没有给出预期的结果。我认为您需要保存 wasAnswerShown 方法的结果,但这只是一个假设。

 public class CheatActivity extends AppCompatActivity {

    //константа TAG (источник сообщения) = "имя класса"
    public  static final String TAG = "CheatActivity";

    //ключ для дополнения-интента который CheatActivity читает и использует (в методе newIntent)
    private static final String EXTRA_ANSWER_IS_TRUE = "com.bignerdranch.android.geoquiz.answer_is_true";
    //ключ дополнения для назначения результата
    private static final String EXTRA_ANSWER_SHOWN = "com.bignerdranch.android.geoquiz.answer_shown";

    private boolean mAnswerIsTrue;

    private TextView mAnswerTextView;
    private Button mShowAnswerButton;

    //инкапсулированный метод для включения дополнения в интент
    //он позволяет создать объект Intent, настроенный дополнениями, необходимыми для CheatActivity
    // boolean answerIsTrue - выступает значением в дополнении
    // (включение дополнения в интент - интент.дополнение(ключ,значение))
    public static Intent newIntent (Context packageContext, boolean answerIsTrue){
        Intent intent = new Intent(packageContext, CheatActivity.class);
        //далее интент.дополнение (ключ, значение)
        intent.putExtra(EXTRA_ANSWER_IS_TRUE, answerIsTrue);
        return intent;
    }

    //декодирование интента результата (из метода setAnswerShownResult)
    public static boolean wasAnswerShown (Intent result){
        return result.getBooleanExtra(EXTRA_ANSWER_SHOWN,false);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate(Bundle) called");// <- эта строка регистрирует сообщение (Log.d),
        // ^(источник сообщения,"какое сообщение вывести")
        setContentView(R.layout.activity_cheat);

        if (savedInstanceState != null){
           ___________ = savedInstanceState.getBoolean(EXTRA_ANSWER_SHOWN, ___________);
        }

        // метод для чтения значения из дополнения + сохранение значения в переменной mAnswerIsTrue
        mAnswerIsTrue = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE, false);

        mAnswerTextView = (TextView) findViewById(R.id.answer_text_view);
        mShowAnswerButton = (Button) findViewById(R.id.show_answer_button);
        //далее когда нажимаем на "Show Answer" - показать текст правильного ответа
        mShowAnswerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mAnswerIsTrue) {
                    mAnswerTextView.setText(R.string.true_button);
                }
                    else {
                    mAnswerTextView.setText(R.string.false_button);
                }
                setAnswerShownResult(true);
            }
        });
    }

    private void setAnswerShownResult (boolean isAnswerShown) {
        Intent data = new Intent();
        data.putExtra(EXTRA_ANSWER_SHOWN, isAnswerShown);
        setResult(RESULT_OK, data);
    }


@Override 
    public void onSaveInstanceState(Bundle saveInstanceState) {
        super.onSaveInstanceState(saveInstanceState);
        Log.d(TAG, "onSaveInstanceState");
        saveInstanceState.putBoolean(EXTRA_ANSWER_SHOWN,__________);
    }
android
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    A. Shakhov
    2020-04-11T15:49:25Z2020-04-11T15:49:25Z

    1)首先你需要声明一个变量private boolean mWasAnswerShown

    2)在onCreate方法中,需要这样获取保存的值:

    if (savedInstanceState != null) {
       mWasAnswerShown = savedInstanceState.getBoolean(EXTRA_ANSWER_SHOWN, false); 
       // второй параметр - значение по умолчанию
       // если в savedInstanceState не окажется объекта с тегом EXTRA_ANSWER_SHOWN
    }
    

    3) 并在 onSaveInstanceState 方法中,以这种方式保存 mWasAnswerShown 变量的值:

    saveInstanceState.putBoolean(EXTRA_ANSWER_SHOWN, mWasAnswerShown);
    

    PS如果你从那个有问题的活动中启动CheatActivity并且你需要CheatActivity的一些结果,那么你也可以在你的有问题的活动中使用start CheatActivity来等待结果:

    Intent startCheatActivityIntent = new Intent(this, CheatActivity.class);
    startActivityForResult(startCheatActivityIntent, 1);
    

    在 CheatActivity 代码中,将必要的数据放入 Intent 中:

    Intent resultsIntent = new Intent();
    resultsIntent.putExtra(EXTRA_ANSWER_SHOWN, mWasAnswerShown);
    setResult(RESULT_OK, resultsIntent);
    finish();
    

    当从带有问题的活动代码中的 CheatActivity 返回时,您将可以通过以下方法访问此意图,您将数据放入其中:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       if (data == null)
          return;
       boolean wasAnswerShown = data.getBooleanExtra(CheatActivity.EXTRA_ANSWER_SHOWN);
       if(wasAnswerShown)
          Toast.makeText(QuestionsActivity.this, "Читерить нехорошо", Toast.LENGTH_SHORT).show();
    }
    
    • 1
  2. Aidar Zainutdinov
    2020-04-11T15:14:35Z2020-04-11T15:14:35Z

    当屏幕旋转时,再次调用 onCreate 方法。在我看来,您可以覆盖 onStop 或 onPause 方法并将状态存储在其中。并且在onCreate方法中,检查保存的状态是否为空,如果不是,将其拉出。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5