Мой настоящий дизайн приложения имеет гораздо более сложную компоновку, включающую GridView с пользовательским адаптером, ListView и т. Д., И я предполагаю, что то же самое относится и к базовому TextView и, следовательно, имеет общий простой код.
Я уже прошел длинную тему на Сохранение состояния активности Android с помощью Save Instance State и узнал (некоторые из них могут быть предположениями) многое о жизненном цикле активности, фрагментах, плюсах / минусах как SavedInstanceState, SharedPreferences и т. Д.
НоЯ все еще не мог найти, как хранить ДАННЫЕ TextView и его АТРИБУТЫ для ex.BackgroundColor сохраняет как после закрытия приложения, его открытия, так и после изменения ориентации.Другой поток, о котором я упоминал выше, предлагает использовать SharedPreferences для данных, которые живут долго даже после выхода из приложения, и onSaveInstanceState, onRestoreInstanceState для временных данных, но ничего особенного о сохранении текстовых размеров атрибутов представления, backgroundcolor и т. Д., Когда приложения закрыты.
Я предполагаюТекст TextView - это Data, а BackgroundColor - это состояние, а SharedPreferences и onSaveInstanceState должны быть обязательными?Я также предполагаю, что такое же решение будет работать для CustomAdapter GridView и ListView, потому что в основном оно содержит TextView в качестве своего элемента или мне нужен другой подход для сохранения и восстановления для хранения данных, атрибутов элементов (TextView) GridView ?.
Пример кода ниже, в котором три TextView создаются динамически и добавляются в LinearLayout, а при щелчке TextView его Text, BackgroundColor будет изменен.Оба эти изменения должны быть восстановлены при закрытии приложения, а также при изменении ориентации.
public class MainActivity extends AppCompatActivity{
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout mDynamicLayout = findViewById(R.id.dynnamicLayout);
for( int i = 1; i < 4; i++ ) {
TextView test = (TextView) getLayoutInflater().inflate(R.layout.gv_item_fixedline,mDynamicLayout,false); // Magic!
int newId = View.generateViewId();
test.setId(newId);
test.setText(Integer.toString(i)); // Remove this if you set text in the xml
test.setTextColor(Color.WHITE);
addListeners(test);
mDynamicLayout.addView(test, i-1); // Bang!
}
}
private void addListeners(final TextView test) {
test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "onClick: clicked");
int val = Integer.parseInt(test.getText().toString());
val++;
test.setText(Integer.toString(val));
test.setBackgroundColor(Color.MAGENTA);
}
});
}
}