Сначала я искал эту информацию около недели и нашел очень мало. Так что, надеюсь, это долгое чтение помогает другим людям.onPause() & onSaveInstanceState() для созданного пользовательского интерфейса
Я создал UI
от JSON
. Это UI
имеет все виды Views
. Такие как EditText
, RadioButton
, CheckBox
, Spinner
и т. Д. Теперь мне нужно учитывать некоторые неизбежные сценарии. Вращение экрана, телефонный звонок, кнопка «Назад», кнопка «домой» и т. Д. Поскольку все эти Views
создаются после сетевого вызова/ответа, и это требует времени, я не хочу повторять это действие каждый раз. Таким образом, экономия фактических RadioButton
или EditText
и что было выбрано на RadioButton
или набрано в EditText
чрезвычайно важно. Из того, что я прочитал для вращения экрана, я использую onSaveInstanceState()
. Для чего бы то ни было, я бы использовал onPause()
, потому что это единственная вещь, которая призвана быть вызванной.
Проблема заключается в том, я понятия не имею, как сохранить созданный программно Views
с в sharedprefs
или А bundle
не говоря уже о ценности без идентификатора в их держат. Давайте посмотрим на мой код, а затем обсудим то, что, по моему мнению, в настоящее время возможно.
allEdit = new ArrayList<EditText>();
else if (map.get(TAG_FIELD).equals(et)) {
Log.v("RESPONSE", "About to create an EditText");
// find
LinearLayout content = (LinearLayout) getActivity()
.findViewById(R.id.add);
// create
TextView tv = new TextView(getActivity());
EditText et = new EditText(getActivity());
LinearLayout ll1 = new LinearLayout(getActivity());
// set
tv.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT));
et.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));
ll1.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));
tv.setText(map.get(TAG_NAME));
ll1.setOrientation(LinearLayout.HORIZONTAL);
// add
ll1.addView(tv);
ll1.addView(et);
allEdit.add(et);
content.addView(ll1);
}
Таким образом, в приведенном выше примере, я создал EditText
и хранить его в ArrayList<EditText>
. Теперь я думал, что в onPause()
я мог бы сделать что-то вроде этого.
for (int i = 0; i < allEdit.size(); i++) {
EditText et = allEdit.get(i);
String input = et.getText().toString();
prefsEdit.put(input);
}
который я думаю, что мог бы работать, он также может перезаписывать String
«вход» в общих настройках снова и снова. Не совсем уверен, как это работает. Он также по-прежнему не решает, как сохранить фактический EditText
, чтобы его не нужно было воссоздавать.
Сейчас в onSavedInstanceState()
Я думаю, что мне удастся просто вставить целое ArrayList<EditText>
в качестве сериализуемого, верно? Как это ...
putSerializable("key", allEdit)
Однако это не сохраняет значения внутри них.
Так как я сохранить эти Views
и их значения в onSavedInstanceState()
и onPause()
? Возможно, что более важно, мне нужны оба? Могу ли я уйти, просто используя onPause()
?
Спасибо
проверить эту ссылку может помочь http://developer.android.com/guide/topics/resources/runtime-changes.html – Raghunandan
@Raghunandan Я прочитал статью. Он затрагивает то, что я рассказываю здесь, о том, что вы не выполняете сетевые запросы дважды, но не пересматривает, как их реализовать на программно созданных представлениях/объектах. –
@ Raghunandan при последующем рассмотрении. Я нашел этот setRetainInstance(). Что выглядит многообещающим. –