2013-09-17 5 views
1

Я, глядя на какой-то код на сайте для разработчиков Android и иметь быстрый вопрос о примере показать здесь - http://developer.android.com/guide/components/fragments.htmlпутаются андроида пример кода

В частности, я смотрю на этот кусок кода -

public static class DetailsActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (getResources().getConfiguration().orientation 
      == Configuration.ORIENTATION_LANDSCAPE) { 
     // If the screen is now in landscape mode, we can show the 
     // dialog in-line with the list so we don't need this activity. 
     finish(); 
     return; 
    } 

    if (savedInstanceState == null) { 
     // During initial setup, plug in the details fragment. 
     DetailsFragment details = new DetailsFragment(); 
     details.setArguments(getIntent().getExtras()); 
     getFragmentManager().beginTransaction().add(android.R.id.content, details).commit(); 
    } 
} 

Какова точка второго, если заявление -

if (savedInstanceState == null) { 

Я не могу найти любую ситуацию, где это, если заявление не будет истинным. Я протестировал этот код, добавив инструкцию else и установив в ней контрольную точку. Я не мог добраться до этой точки останова, несмотря ни на что. Итак, зачем даже беспокоиться о выражении if? Почему бы не оставить это вместе?

+3

http://developer.android.com/guide/topics/resources/runtime-changes.html. проверьте это – Raghunandan

+0

. Я знаю, для каких состояний экземпляров используются, мой вопрос в том, почему код, который я перечислял, когда-либо имел состояние ненулевого экземпляра? Оператор if всегда будет оценивать true в приведенном примере. – user2700452

+0

, если вы знаете, что знаете, почему этот код использовался. прочитайте документы полностью. – Raghunandan

ответ

1

Бывают ситуации, когда ваша активность остановлена ​​операционной системой Android. В таких случаях вы можете сохранить состояние своей деятельности по вызову [onSaveInstanceState] (http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle)). Если после этого ваша активность будет запущена снова, она будет передана созданным вами Bundle, чтобы вы могли восстановить состояние правильно.

+0

Я знаю, для каких состояний экземпляров используются, мой вопрос в том, почему в коде, который я перечислял, когда-либо было состояние ненулевого экземпляра? Оператор if всегда будет оценивать true в приведенном примере. – user2700452

+0

Я предполагал, что вы только вставили метод onCreate в Activity. Если код, который вы отправили, представляет собой всю активность, то оператор if всегда будет оценивать значение 'true'. Хорошая практика заключается в том, чтобы включить его там, чтобы в случае, если кто-то использует код в качестве отправной точки, им известно о случае, когда значение может быть не равным нулю. – Ameen

0

Если ваше приложение было приостановлено/убито, и т.д., и вы сохранили состояние, onSaveInstanceState затем savedInstanceState будет содержать состояние вашего приложения, которые вы сохранили. в противном случае он будет нулевым.

+0

Я знаю, для каких состояний экземпляра используются, мой вопрос в том, почему в коде, который я перечислял, когда-либо имелось состояние ненулевого экземпляра? Оператор if всегда будет оценивать true в приведенном примере. – user2700452

+0

@ user2700452 Нет, не будет. Если Android убивает, а затем воссоздает действие, то состояние экземпляра, сохраненное в onSaveInstanceState, будет передано. – Simon

+0

Но не существует состояния экземпляра - вся активность указана в моем примере.Нечего экономить. Он всегда будет нулевым. – user2700452

1

вы должны смотреть в полном примере кода. С этой частью он имеет смысл.

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("curChoice", mCurCheckPosition); 
} 

Если вы начнете свою деятельность в первый раз, когда Bundle savedInstanceState будет пустым, а тело оператора if будет выполнено. Если вызывается onSaveInstanceState, потому что вы перешли от Activity, Bundle больше не имеет значения null, и тело if будет не выполнено.

+0

Код, на который вы ссылаетесь, относится к другому фрагменту/активности - (The TitlesFragment, который содержится в MainActivity). Код, который я перечисл, предназначен для DetailsActivity. – user2700452

+0

@ user2700452 Вы чертовски правы. Виноват –

0

По-видимому, это было добавлено к примеру для будущего расширения этого кода. В то время как у нее нет абсолютно никакой функциональности, поскольку она стоит прямо сейчас, если это действие должно было запустить другое действие и быть убитым, в то время как новое действие было сосредоточено, этот код восстановил бы активность, когда пользователь нажимает кнопку «Назад», а не восстанавливается с нуля.

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