方向更改后视图不更新

Posted

技术标签:

【中文标题】方向更改后视图不更新【英文标题】:View not updating after orientation change 【发布时间】:2016-07-14 11:04:10 【问题描述】:

我有一个适配器类MyAdapter -

 @Override
    public void bindView(View view, Context context, Cursor cursor) 
        ViewHolder viewHolder = (ViewHolder) view.getTag();
        viewHolder.time.setText(strText);
        viewHolder.time.setTextColor(0xff000000);
        viewHolder.time.setTextSize(17);
        viewHolder.time.setVisibility(View.VISIBLE);
        viewHolder.time.setBackgroundColor(nColor);
        viewHolder.time.setPadding(25,25,25,25);
        MyFragment my= new MyFragment();
        my.setLandScape1(strText,nColor);
        view.invalidate();
        
    

MyFragment

public void setLandScape1(String time1,int time_Bcolor1)
    this.delay_time1 = time1;
    this.delay_time_BColor1 = time_Bcolor1;


@Override
public void onSaveInstanceState(Bundle outState) 
    outState.putString("Time",delay_time1);
    outState.putInt("BColor",delay_time_BColor1);
    super.onSaveInstanceState(outState);


 @Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) 
       delay_time1 = savedInstanceState.getString("Time");
        Log.d("hi","delay_time1 = " + delay_time1);
        delay_time_BColor1 = savedInstanceState.getInt("BColor");
        Log.d("hi","delay_time_BColor1  =" + delay_time_BColor1);
     

日志是 -

水平转动时,

delay_time1 = 45

delay_time_BColor1  = 65000

再次垂直旋转时,

 delay_time1 = 0

delay_time_BColor1  = 0

为什么当变成纵向时它变成0,为什么在横向时,我在onCreate() 中得到值,但视图仍然没有更新。

【问题讨论】:

【参考方案1】:

将逻辑从onCreate 移动到onRestoreInstanceState()

一旦重新创建视图,onRestoreInstanceState 将被调用,而不是 onCreate()

【讨论】:

好的,但我无法在 MyFragment 类中覆盖 onRestoreInstanceState()。可能是什么原因 你可以在fragment中使用onActivityCreated()来恢复,但这不是一致的设计。您应该设计活动以处理方向变化。 哦..我在onActivityCreated()中试过了,应用程序崩溃了

以上是关于方向更改后视图不更新的主要内容,如果未能解决你的问题,请参考以下文章

呈现视图控制器中的方向更改未更新父视图控制器

当被模态视图控制器覆盖时,iOS 6 视图控制器布局在方向更改后不会更新

更改 iPad 方向、旋转状态栏、工具栏,但不更改主视图

如何更改视图中每个 UIButton 的框架

使用视图模型时不保留方向更改

对象在视图中和设备方向更改后位置不正确