【问题标题】:Data lost due to orientation change when calling start activity for result调用 start Activity 以获取结果时,由于方向更改导致数据丢失
【发布时间】:2013-08-06 12:25:40
【问题描述】:

如果我不能说清楚,请询问您的查询不要否定它。我是新用户

我制作了一个问答应用程序,在回答完所有问题后,它将转到完成页面。其中三个按钮将指示您的答案是否正确。
您可以通过单击按钮 1,2 或 3 来重新回答您的问题,这将发送相应的问题编号。

我的问题。

我使用startActivityForResult 函数从问题类转到完成类并返回一些数据,然后调用onActivityResult 函数并成功运行。 但是如果问题类和完成类的方向不同,那么点击问题按钮后它不会调用onActivityResult函数,它会重新启动问题类。

这是问题类的代码。我在哪里使用startactivityforresult

 Intent intent=new Intent (question.this,finish.class);
  intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);                                   intent.putExtra("question1",correct[1]);
  intent.putExtra("question2",correct[2])
  intent.putExtra("question3",correct[3]);
  startActivityForResult(intent, REQUEST);


  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     if (requestCode == REQUEST && resultCode == Activity.RESULT_OK) {
          latitude = data.getIntExtra("latitude", 0)
         requstquestion(latitude);

     }}

这是完成类的代码:

      Intent mintent = getIntent();                 //recive the correct array
    accuracy[1] = mintent.getIntExtra("question1",0);
    accuracy[2] = mintent.getIntExtra("question2",0);
    accuracy[3] = mintent.getIntExtra("question3",0);



     question1.setOnClickListener(new View.OnClickListener() {

         public void onClick(View v) {


            setResult(Activity.RESULT_OK, 
                    new Intent().putExtra("latitude", 0));
                finish();

                // TODO Auto-generated method stub
                    }
                });
    question2.setOnClickListener(new View.OnClickListener() {

         public void onClick(View v) {


            setResult(Activity.RESULT_OK, 
                    new Intent().putExtra("latitude", 1));
                finish();


                // TODO Auto-generated method stub
                    }
                });
    question3.setOnClickListener(new View.OnClickListener() {

         public void onClick(View v) {
        setResult(Activity.RESULT_OK, 
                    new Intent().putExtra("latitude", 2));
                finish();

                // TODO Auto-generated method stub
                    }
                });

【问题讨论】:

  • 发布整个代码?这些是classes 活动吗?

标签: android performance android-layout android-intent android-activity


【解决方案1】:

在您的应用清单中,您是否记得说过您的 Question 活动是您的 Finish 活动的父项?像这样的东西,例如:

    <activity android:name=".FinishActivity"
              android:parentActivityName=".QuestionActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".QuestionActivity"/>
    </activity>

因为如果你这样做,那么onActivityResult() 应该在QuestionActivity 中被调用,即使你在FinishActivity 中调用finish() 时屏幕方向不同。我自己在遇到类似问题时通过反复试验发现了这一点。

【讨论】:

    【解决方案2】:

    在您的清单中添加 configChanges 到您的活动以进行定位。

    列出活动将自行处理的配置更改。什么时候 运行时发生配置更改,活动被关闭 并默认重新启动,但使用此声明配置 属性将阻止活动重新启动

     <activity
                android:name=".YourActivity"
                android:label="@string/title_activity_android_basics_starter"
                android:configChanges="keyboard|keyboardHidden|orientation">
    

    【讨论】:

    • 我对不同的方向有不同的布局,所以我不能这样做
    猜你喜欢
    • 2022-12-11
    • 1970-01-01
    • 2012-09-15
    • 2016-02-23
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多