Где установить все Listeners
для пользовательских интерфейсов?
Правильно ли установить их в onCreate
? Это выглядит так неструктурированным и странным.
Есть ли лучшее место для их установки?
Где установить всех слушателей?
Ответ 1
Отсюда: http://developer.android.com/reference/android/app/Activity.html
onCreate (Bundle) - это то, где вы инициализируете свою деятельность. Наиболее важно, здесь вы обычно вызываете setContentView (int) с помощью ресурс макета, определяющий ваш пользовательский интерфейс, и используя findViewById (int) для получить виджеты в этом пользовательском интерфейсе, с которыми вам нужно взаимодействовать программным способом.
Когда вы инициализируете свои взгляды, они готовы к прослушиванию. onCreate
- хороший обратный вызов для установки слушателей. Другим способом вы можете установить его в onStart
или onResume
, но вы должны понимать, что его плохая практика, потому что onStart
и onResume
вызывает каждый раз, когда пользователь видит вашу активность. onCreate
вызывает только при инициализации Activity. Это причина, почему вы должны использовать onCreate
. На самом деле, хорошая практика реализует метод типа initListeners()
, где вы можете поместить все логики слушателей.
Удачи!
Ответ 2
Используйте onCreate
метод, чтобы установить UI
и получить Widget
из UI
.
protected void onCreate(Bundle savedValues) {
// Here set the UI and get the widgets
//set the Listeners on the widgets you are getting at the above line
}
И вы можете определить clickListener
для виджетов и использовать его в методе onCreate
OnClickListener someListener = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(v.getContext(), "widget pressed ", Toast.LENGTH_SHORT).show();
}
};
и вы можете установить выше clickListener
виджет, который вы создали в onCreate
методе
Ответ 3
Для слушателей onCreate() - хорошее место.
Рассмотрим 2 действия A, B.
A → B, запуская операцию "B" из "A", если мы вернемся из B → A, то onStart() методы onResume() снова будут вызваны в "A", и это будет лишним. Поэтому лучше всего добавлять слушателей только в onCreate().
А для прослушивателей кнопок вы можете установить атрибут android: onClick = "method_name" только в файле xml.
Ответ 4
Это может быть то, что вы хотите избежать беспорядка
public class SomeActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
Button button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view){
SomeActivity.this.button1_onClick(view);
}
});
}
private void button1_onClick(View view){
///do stubs here
}
}
Ответ 5
Вы можете установить свойство onClick для любого вида в xml. Так что теперь вам не нужно искать и устанавливать onClick в onCreate. Теперь вам нужно определить публичный метод в активности имени u, упомянутого в xml. Это выглядит построенным.