在哪里为用户界面设置所有的监听器
?
在onCreate
中设置它们是否是一个好的做法?这看起来很不结构化和奇怪。
是否有更好的地方可以设置它们?
从这里开始:http://developer.android.com/reference/android/app/Activity.html
onCreate(Bundle) 是您初始化活动的地方。最重要的是,您通常会在此处使用定义您的 UI 的布局资源调用 setContentView(int),并使用 findViewById(int) 检索您需要以编程方式进行交互的 UI 中的小部件。
当您初始化视图时,它们已经准备好被监听了。onCreate
是设置监听器的好回调。或者您也可以在 onStart
或 onResume
中设置它,但您应该理解这是一种不好的做法,因为每次用户看到您的活动时,onStart
和 onResume
都会被调用。 onCreate
仅在 Activity 初始化时调用,这就是为什么您应该使用 onCreate
的原因。实际上,很好的做法是实现类似于 initListeners()
的方法,您可以在其中放置所有监听器逻辑。
祝你好运!
使用onCreate
方法设置UI
并从UI
获取Widget
。
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
方法中创建的部件。
对于听众来说, onCreate() 是个好地方。
考虑两个活动 A, B.
A -> B,从'A'启动'B'活动,如果我们从B回到A,则在'A'活动中会再次调用 onStart(),onResume() 方法,这是多余的。因此,最好只在 onCreate() 中添加监听器。
对于按钮监听器,您只需在 xml 文件中设置 android:onClick="method_name" 属性即可。
这可能是你想要避免混乱的方法
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
}
}
你可以在xml中为任何视图设置onClick属性。现在你无需在onCreate中查找和设置onClick。现在你需要在活动中定义一个名称与xml中指定的相同的公共方法。这看起来构造得很好。
如在“Activity 生命周期”中所述,onCreate() 是执行仅需在活动的整个生命周期内发生一次的基本应用程序启动逻辑的地方。onStart() 是活动对用户可见的地方,而onResume() 是用户与活动交互的地方,比如触摸或单击。 因此,最好将点击监听器放在 onResume() 中。
参考:https://developer.android.com/guide/components/activities/activity-lifecycle#lc
onCreate
中初始化它们,然后可以在onClick(View v)
中实现其余部分。 - Atieh