【问题标题】:save value of a variable in a DialogFragment when the screen rotates屏幕旋转时将变量的值保存在 DialogFragment 中
【发布时间】:2014-09-04 17:27:41
【问题描述】:

好吧,当屏幕在 Android 中旋转时,我想保存 dialogFragment 中包含的变量的值。我已经尝试了在互联网上可以找到的所有方法,但没有一个对我有用。有些杀死了我的应用程序,而另一些则根本没有做任何事情。

我需要一种真实有效的方法来保存在设备屏幕旋转时重置的 EditText 的值。 EditText 位于 DialogFragment 中,将其转换为 FragmentActivity。

非常感谢

【问题讨论】:

    标签: android rotation fragment screen dialogfragment


    【解决方案1】:

    将片段的retaingInstance 标志设置为true

    http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)

    这可以防止 Fragment 实例被重新创建。

    还要确保不要一直重新创建片段:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
    
        if (savedInstanceState == null) {
            Fragment f = new Myfragment();
            f.setRetainInstance(true);
            getSupportFragmentManager().beginTransaction()
                .add(R.id.container, f))
                .commit();
        }
    
    }
    

    由于在 Activity 重新创建期间会保留 View 状态,并且您保留相同的 Fragment 实例,因此您不需要一直保存 TextView 值。

    【讨论】:

      【解决方案2】:

      我不知道我是否理解您的问题,但您可以按如下方式捕获轮换:

      @Override
          public void onConfigurationChanged(Configuration newConfig) {
              super.onConfigurationChanged(newConfig);
              if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
              {
                  //save value
              }
               if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
              {
                  //save value
              } 
          }
      

      如果您希望您的活动不重新启动,您应该将其添加到清单文件中:

      <activity
                  .....
                  android:configChanges="keyboardHidden|orientation|screenSize"
                  ..... >
       </activity>
      

      【讨论】:

      • 不,指的是 &lt;!-- language: java --&gt; @Override public void onSaveInstanceState(Bundle outState){ ` super.onSaveInstanceState(outState);` ` outState.putString("precio", ` txtPrecio.getText().toString()); } 但是这个方法对我不起作用,等等。
      【解决方案3】:

      我刚刚发现您不能将自动保存捆绑包的方法应用于对话,但这些方法将应用于这些对话相关的活动或片段。如果我可以通过代码修复它,将把解决方案放在这里。谢谢你

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多