2015-10-17 4 views
0

Вот простой проект:Как восстановить состояние отстраненного зрения

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <Button 
     android:id="@+id/add_some_layout_button" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Add layout"/> 

</LinearLayout> 

some_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/edittext_container" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <EditText 
     android:id="@+id/some_edittext" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="Some hint" 
     android:inputType="text"/> 

</LinearLayout> 

Рассмотрим два случая:


Случай 1:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final LinearLayout container = (LinearLayout) findViewById(R.id.container); 

     final LayoutInflater layoutInflater = LayoutInflater.from(MainActivity.this); 
     final View someLayoutWithEditText = layoutInflater.inflate(R.layout.some_layout, container, false); 
     container.addView(someLayoutWithEditText); 

     // button isn't used 
    } 
} 

Эффект случае 1: EditText сохраняет свой текст во время изменения конфигурации.


Случай 2:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final LinearLayout container = (LinearLayout) findViewById(R.id.container); 

     final LayoutInflater layoutInflater = LayoutInflater.from(MainActivity.this); 
     final View someLayoutWithEditText = layoutInflater.inflate(R.layout.some_layout, container, false); 

     Button addLayoutButton = (Button) findViewById(R.id.add_some_layout); 
     addLayoutButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       container.addView(someLayoutWithEditText); 
      } 
     }); 
    } 
} 

Влияние случая 2: Добавляем EditText на кнопку мыши => после того, как все "восстановить часть" было сделано => от состояния EditText не был восстановлен


Вопрос: Как восстановить состояние EditText во втором случае?

+0

не делайте это окончательным – ivan

ответ

1

Ваше государственное восстановление выполняется в onRestoreInstanceState() методе, он вызывается системой после onCreate, поэтому, если вы добавите свой просмотр после восстановления, вы будете потеряны.

Так что если вы хотите сохранить состояние вашего зрения и восстановить его вручную, а не системой, вы можете выполнить следующие действия:

1) Перекрыть onSaveInstanceState() метод и сохранить значение внутри EditText в параметре Bundle. 2) Получите его из комплекта и установите его вручную в EditText.

Смежные вопросы