Вам не нужно указывать имена столбцов вручную в xaml. Просто установите для свойства AutoGenerateColumns значение true, и ваш список будет автоматически привязан к DataGrid. обратитесь к коду. Код XAML:
& lt; Grid & gt; & lt; DataGrid x: Name = "MyDatagrid" AutoGenerateColumns = "True" Height = "447" HorizontalAlignment = "Left" Margin = "20,85,0,0" VerticalAlignment = "Top" Width = "799" ItemsSource = "{ Binding Path = ListTest, Mode = TwoWay, UpdateSourceTrigger = PropertyChanged} "CanUserAddRows =" False "& gt; & Lt; / Сетка & GT;
C #
Открытый класс Test {public string m_field1_Test {get; set;} public string m_field2_Test {get; задавать; } public Test () {m_field1_Test = "field1"; m_field2_Test = "field2"; } public MainWindow () {listTest = новый List & lt; Test & gt; (); for (int i = 0; i & lt; 10; i ++) {obj = new Test (); listTest.Add (OBJ); } this.MyDatagrid.ItemsSource = ListTest; InitializeComponent (); }
См. Жизненный цикл активности (в Android Developers).
[/g10]
Вызывается, когда действие сначала создается. Здесь вы должны выполнить всю свою обычную статическую настройку: создавать представления, привязывать данные к спискам и т. Д. Этот метод также предоставляет вам пакет, содержащий ранее замороженное состояние активности, если оно есть. Всегда за ним следует onStart ().
blockquote>Вызывается после того, как ваша активность была остановлена, до этого снова начнется. Всегда за ним следует onStart ()
blockquote>Вызывается, когда действие становится видимым для пользователя. За ним следует onResume (), если действие выходит на передний план или onStop (), если оно становится скрытым.
blockquote>Вызывается, когда действие начнет взаимодействовать с пользователем. На данный момент ваша деятельность находится в верхней части стека действий, при этом пользовательский ввод идет.
blockquote>Вызывается как часть жизненного цикла активности, когда действие выходя на задний план, но пока не убит. Совместим с onResume (). Когда действие B запускается перед активностью A, этот обратный вызов будет вызываться на A. B не будет создан до тех пор, пока не будет возвращен A onPause (), поэтому обязательно не делайте ничего длинного здесь.
blockquote>Вызывается, когда вы больше не видите пользователя. После этого вы будете получать либо onRestart (), onDestroy (), либо ничего, в зависимости от более поздней активности пользователя.
Обратите внимание, что этот метод никогда не может быть вызван в ситуациях с низкой памятью, когда в системе недостаточно памяти чтобы продолжить работу вашего процесса после вызова метода onPause ().
blockquote>Последний вызов вы получаете до того, как ваша деятельность будет уничтожена. Это может произойти либо из-за завершения операции (кто-то по имени заканчивает (), либо потому, что система временно уничтожает этот экземпляр действия для экономии места. Вы можете различать> эти два сценария с методом isFinishing ().
blockquote>Когда активность в первый раз загружается, события вызываются, как показано ниже:
onCreate() onStart() onResume()
Когда вы нажимаете кнопку «Телефон», активность переходит в фоновый режим, а следующие события вызванный:
onPause() onStop()
Выйдите из телефонного набора, и будут вызываться следующие события:
onRestart() onStart() onResume()
Когда вы нажимаете кнопку «Назад» или пытаетесь завершить () активность событий называются ниже:
onPause() onStop() onDestroy()
ОС Android использует очередь приоритетов, чтобы помочь в управлении действиями, выполняемыми на устройстве На основе состояния, в котором находится конкретная активность Android, ему будет присвоен определенный приоритет в ОС. Эта система приоритетов помогает Android идентифицировать действия, которые больше не используются, al с помощью ОС восстанавливать память и ресурсы. Следующая диаграмма иллюстрирует состояния, через которые может проходить активность за время жизни:
Эти состояния можно разбить на три основные группы следующим образом:
Активен или работает - действия считаются активными или выполняются, если они находятся на переднем плане, также называются вершинами стека действий. Это считается наивысшим приоритетом в стеке активности Android, и как таковое будет уничтожаться только ОС в экстремальных ситуациях, например, если активность пытается использовать больше памяти, чем доступно на устройстве, так как это может привести к тому, что пользовательский интерфейс будет перестают отвечать.
Приостановлено. Когда устройство переходит в режим сна или активность все еще видима, но частично скрыта в результате новой, не полной или прозрачной активности, активность считается приостановленной. Приостановленные действия все еще живы, то есть они поддерживают всю информацию о состоянии и членах и остаются прикрепленными к оконному менеджеру. Это считается второстепенным приоритетом в стеке активности Android и, как таковой, будет уничтожаться только ОС, если убить это действие будет удовлетворять требованиям к ресурсам, необходимым для поддержания стабильной и оперативной активности Active / Running.
Остановлен - действия, полностью закрытые другим действием, считаются остановленными или находящимися в фоновом режиме. Остановленные действия по-прежнему пытаются сохранить информацию о своем штате и членстве как можно дольше, но прекращенные действия считаются наименьшим приоритетом для трех государств, и, таким образом, ОС сначала уничтожит действия в этом состоянии, чтобы удовлетворить потребности в ресурсах деятельности более высокого приоритета.
* Пример активности для понимания жизненного цикла **
import android.app.Activity; import android.os.Bundle; import android.util.Log; public class MainActivity extends Activity { String tag = "LifeCycleEvents"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.d(tag, "In the onCreate() event"); } public void onStart() { super.onStart(); Log.d(tag, "In the onStart() event"); } public void onRestart() { super.onRestart(); Log.d(tag, "In the onRestart() event"); } public void onResume() { super.onResume(); Log.d(tag, "In the onResume() event"); } public void onPause() { super.onPause(); Log.d(tag, "In the onPause() event"); } public void onStop() { super.onStop(); Log.d(tag, "In the onStop() event"); } public void onDestroy() { super.onDestroy(); Log.d(tag, "In the onDestroy() event"); } }
Мне нравится этот вопрос и ответы на него, но до сих пор не было охвачено менее часто используемых обратных вызовов, таких как onPostCreate () или onPostResume () . Стив Померой попытался включить диаграмму, в том числе и о том, как они относятся к жизненному циклу фрагмента Android, в https://github.com/xxv/android-lifecycle . Я пересмотрел большую диаграмму Стива, чтобы включить только часть активности и отформатировал ее для распечатки одной страницы с одной страницей. Я разместил его как текстовый PDF в https://github.com/code-read/android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf , а ниже - его изображение:
Существует семь методов управления жизненным циклом приложения для Android:
Возьмем простой сценарий, в котором знание того, в каком порядке эти методы
onCreate()
- - -> onStart()
- - -> onResume()
onPause()
- - -> onStop()
onRestart()
- - -> onStart()
- - -> onResume()
onStop()
- - -> onDestroy()
Начальное состояние включает в себя:
Создание нового процесса Linux, выделение новой памяти для нового UI и настройку всего экрана. Поэтому основная часть работы здесь задействована.
Состояние выполнения включает в себя:
Это действие (состояние), которое в данный момент находится на экране. Это состояние только обрабатывает такие вещи, как ввод текста на экране и касание & amp; нажатие кнопок.
Приостановленное состояние включает в себя:
Когда действие не находится на переднем плане, а вместо этого оно находится в фоновом режиме, то действие, как говорят, находится в состоянии паузы.
Остановленное состояние включает в себя:
Остановленную активность можно купить только на переднем плане, перезапустив ее, а также ее можно уничтожить в любой момент времени.
Менеджер активности обрабатывает все эти состояния таким образом, чтобы пользовательский опыт и производительность всегда были в лучшем состоянии даже в сценариях, где новая активность добавляется к существующим видам деятельности
Вся путаница вызвана тем, что Google выбрал неинтуитивные имена вместо следующего:
onCreateAndPrepareToDisplay() [instead of onCreate() ]
onPrepareToDisplay() [instead of onRestart() ]
onVisible() [instead of onStart() ]
onBeginInteraction() [instead of onResume() ]
onPauseInteraction() [instead of onPause() ]
onInvisible() [instead of onStop]
onDestroy() [no change]
Диаграмма активности может быть интерпретирована как:
[/g0]
На странице Android Developers
onPause ():
Вызывается, когда система начнет возобновление предыдущего действия. Обычно это используется для переноса несохраненных изменений в постоянные данные, остановки анимации и других вещей, которые могут потреблять процессор и т. Д. Реализации этого метода должны быть очень быстрыми, потому что следующее действие не будет возобновлено до тех пор, пока этот метод не вернется. За ним следует либо onResume (), если операция возвращается к фронту, либо onStop (), если она становится невидимой для пользователя.
blockquote>onStop ():
Вызывается, когда действие больше не отображается пользователю, потому что другое действие возобновлено и распространяется на него. Это может произойти либо из-за того, что начинается новая деятельность, но и перед тем, как это происходит, или что этот объект уничтожается. Далее следует либо onRestart (), если это действие возвращается для взаимодействия с пользователем, либо onDestroy (), если эта активность уходит.
blockquote>Теперь предположим, что есть три действия, и вы переходите от От A до B, то onPause от A будет теперь вызываться от B до C, затем на Pause B и onStop A будет вызываться.
Приостановленное действие получает Возобновление и Stopped перезапускается.
Когда вы вызываете
this.finish()
, вызывается onPause-onStop-onDestroy. Главное, что нужно помнить: приостановлено. Действия прекращаются, и прекращенная деятельность получает Destroyed, когда для Android требуется память для других операций.Надеюсь, это достаточно ясно.
Добавление дополнительной информации в верхней части высоко оцененного ответа (добавлен дополнительный раздел KILLABLE и следующий набор методов, которые будут вызываться в жизненном цикле):
Источник: разработчик .android.com
Обратите внимание на столбец «Killable» в приведенной выше таблице - для тех методов, которые отмечены как подлежащие уничтожению , после того, как этот метод возвращает процесс, в котором эта активность может быть убита системой, в любой момент без какой-либо другой строки исполняемого кода.
Из-за этого вы должны использовать метод onPause()
для записи любого постоянные данные (например, редактирование пользователя) для хранения. Кроме того, метод onSaveInstanceState(Bundle)
вызывается перед тем, как помещать активность в такое фоновое состояние, позволяя вам сэкономить любое динамическое состояние экземпляра в вашей деятельности в заданное Bundle
, которое позднее будет получено в onCreate(Bundle)
, если действие необходимо воссоздать.
Обратите внимание, что важно сохранить постоянные данные в onPause()
вместо onSaveInstanceState(Bundle)
, поскольку последний не является частью обратных вызовов жизненного цикла, поэтому не будет вызываться в каждой ситуации, как описано в его документации.
Я хотел бы добавить еще несколько методов. Они не перечислены как методы жизненного цикла, но они будут называться во время жизненного цикла в зависимости от некоторых условий. В зависимости от вашего требования, возможно, вам придется реализовать эти методы в своем приложении для правильной обработки состояния.
onPostCreate(Bundle savedInstanceState)
Вызывается, когда запуск активности завершен (после вызова
blockquote>onStart()
иonRestoreInstanceState(Bundle)
).onPostResume()
Вызывается, когда возобновление активности завершено (после того, как был вызван
blockquote>onResume()
).onSaveInstanceState(Bundle outState)
Вызывается для извлечения состояния каждого экземпляра из активности до его убийства, состояние может быть восстановлено в
blockquote>onCreate(Bundle)
илиonRestoreInstanceState(Bundle)
(связка, заполненная этим методом, будет передана обоим).onRestoreInstanceState(Bundle savedInstanceState)
Этот метод вызывается после
blockquote>onStart()
, когда активность повторно инициализируется из ранее сохраненного состояния, указанного здесь вsavedInstanceState
.Мой код приложения, используя все эти методы:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private EditText txtUserName; private EditText txtPassword; Button loginButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("Ravi","Main OnCreate"); txtUserName=(EditText) findViewById(R.id.username); txtPassword=(EditText) findViewById(R.id.password); loginButton = (Button) findViewById(R.id.login); loginButton.setOnClickListener(this); } @Override public void onClick(View view) { Log.d("Ravi", "Login processing initiated"); Intent intent = new Intent(this,LoginActivity.class); Bundle bundle = new Bundle(); bundle.putString("userName",txtUserName.getText().toString()); bundle.putString("password",txtPassword.getText().toString()); intent.putExtras(bundle); startActivityForResult(intent,1); // IntentFilter } public void onActivityResult(int requestCode, int resultCode, Intent resIntent){ Log.d("Ravi back result:", "start"); String result = resIntent.getStringExtra("result"); Log.d("Ravi back result:", result); TextView txtView = (TextView)findViewById(R.id.txtView); txtView.setText(result); Intent sendIntent = new Intent(); //sendIntent.setPackage("com.whatsapp"); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "Message..."); sendIntent.setType("text/plain"); startActivity(sendIntent); } @Override protected void onStart() { super.onStart(); Log.d("Ravi","Main Start"); } @Override protected void onRestart() { super.onRestart(); Log.d("Ravi","Main ReStart"); } @Override protected void onPause() { super.onPause(); Log.d("Ravi","Main Pause"); } @Override protected void onResume() { super.onResume(); Log.d("Ravi","Main Resume"); } @Override protected void onStop() { super.onStop(); Log.d("Ravi","Main Stop"); } @Override protected void onDestroy() { super.onDestroy(); Log.d("Ravi","Main OnDestroy"); } @Override public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) { super.onPostCreate(savedInstanceState, persistentState); Log.d("Ravi","Main onPostCreate"); } @Override protected void onPostResume() { super.onPostResume(); Log.d("Ravi","Main PostResume"); } @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); } }
Вход в систему:
public class LoginActivity extends AppCompatActivity { private TextView txtView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); txtView = (TextView) findViewById(R.id.Result); Log.d("Ravi","Login OnCreate"); Bundle bundle = getIntent().getExtras(); txtView.setText(bundle.getString("userName")+":"+bundle.getString("password")); //Intent intent = new Intent(this,MainActivity.class); Intent intent = new Intent(); intent.putExtra("result","Success"); setResult(1,intent); // finish(); } }
выход: (до паузы)
ВыходD/Ravi: Main OnCreate D/Ravi: Main Start D/Ravi: Main Resume D/Ravi: Main PostResume
: (после возобновления паузы)
D/Ravi: Main ReStart D/Ravi: Main Start D/Ravi: Main Resume D/Ravi: Main PostResume
Примечание что
onPostResume()
вызывается, хотя он не цитируется как метод жизненного цикла.
Начните с основ. У меня есть много руководств, связанных с компонентами, поддерживающими жизненный цикл. Вы учитесь на жизненный цикл, так как ваш вопрос будет https://www.youtube.com/watch?v=e-ews5dRMwI
Действие имеет шесть состояний
Жизненный цикл активности имеет семь методов
onCreate()
onStart()
onResume()
onPause()
onStop()
onRestart()
onDestroy()
[/g6]
Ситуации
onCreate() --> onStart() --> onResume()
onPaused() -- > onStop() --> onDestory()
onPaused() --> onStop()
onRestart() --> onStart() --> onResume()
onPaused() --> onStop()
onRestart() --> onStart() --> onResume()
onPause()
onResume()
onPause() --> onResume()
onPause()
onResume()
onPaused() --> onStop()
onRestart() --> onStart() --> onResume()