【问题标题】:where is the correct place to put onclick listeners in android Activity? [closed]在 android Activity 中放置 onclick 侦听器的正确位置在哪里? [关闭]
【发布时间】:2013-01-28 07:33:49
【问题描述】:

在 android 活动中放置 onclick 侦听器的最佳位置在哪里?我见过两种不同的方式。一种方法是将它们放在 onCreate 方法中,另一种方法是将它们放在 onCreate 方法的下方和外部。

我刚刚启动了一个新的 android 应用,不知道哪里是最好的地方。

两种方式如下所示。

伪代码示例一;

oncreate 方法中的 onclick 方法

 MainActivity extends Activity{

 onCreate(){

 onClick listeners 

  } // end of onCreate method

 }  // end of MainActivity class

伪代码示例二;

将 onclick 放在 oncreate 方法的下方和外部

 MainActivity extends Activity{

 onCreate(){

 } // end of onCreate method

 onClick listeners

 }  // end of MainActivity class

【问题讨论】:

标签: android onclick position oncreate


【解决方案1】:

两种方式都是正确的。你如何组织代码实际上是为了可读性。如果onCreate() 中的听众太多,之后就很难阅读代码。但是,如果你只有一个而且它是一个班轮,最好把它放在onCreate()

【讨论】:

    【解决方案2】:

    您甚至可以使用 xml 文件输入onClicklistener

    在你的 xml 中使用这个标签:

    android:onClick="startActivityB"

    然后在java文件中

    public void startActivityB(View v) {
            Intent intent = new Intent(ActivityA.this, ActivityB.class);
            startActivity(intent);
        }
    

    【讨论】:

    • 这是不好的做法吗?你什么时候不这样做?
    【解决方案3】:

    如何编写活动代码由您决定。 如果您愿意,您可以在onCreate() 中编写 onclick 的所有代码,但如果您有更多按钮或视图要处理,并且您将为每个按钮或视图编写单独的 onClick,那么您的 onCreate() 看起来会很笨拙。

    在这种情况下,您可以为所有按钮创建公共onClickListener,并单独编写逻辑,使您的代码看起来更漂亮,否则您也可以使用onCreate()

    这对我来说是最好的方式:

       btn1.setOnClickListener(m_onClickListener);
    /**
     * Common click listener
     */
    OnClickListener m_onClickListener=new OnClickListener()
    {
        @Override
        public void onClick(View p_v)
        {
            switch(p_v.getId())
            {
                case R.id.btn1:
                    break;
                        }
                }
          };
    

    【讨论】:

    • 为什么我不允许你的Activity 类实现OnClickListener?这将减少对象数量,并且更易于阅读
    【解决方案4】:

    您可以同时使用这两种方式。我认为这项工作具有相同的势头

    如果使用第二种方法,代码可读性会好

    注意:还有另一种方法在 your_layout.xml 中提供 onClick 。但是现在片段开始发挥它的作用,因此它没有被广泛使用 (REFER)。

    【讨论】:

    • 第二个链接失效了
    【解决方案5】:

    你应该总是更喜欢第二个。如果你把它放在创建中,它也可以工作。但您不希望每次加载活动时都执行此操作。

    这是一个例子

    package com.damon86.toastExample;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.LinearLayout;
    import android.widget.Toast;
    
    public class ToastExample extends Activity implements OnClickListener {
        /** Called when the activity is first created. */
    
        // The text and button used on the display.
        EditText toastText = null;
        Button showToast = null;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // Create a new Layout.
            LinearLayout rootLayout = new LinearLayout(getApplicationContext());
    
            // Create textfield
            toastText = new EditText(getApplicationContext());
            toastText.setText("Hello Toast!");
    
            // Create button and set OnClickListener
            showToast = new Button(getApplicationContext());
            showToast.setText("Show Toast");
            showToast.setOnClickListener(this);
    
            // Add components to the Layout.
            rootLayout.addView(toastText);
            rootLayout.addView(showToast);
    
            // Add the layout as the content view for the application.
            setContentView(rootLayout);
        }
    
        /**
         * Implemented method - onClick.
         * Show the user a piece of toast.
         */
        @Override
        public void onClick(View v) {
    
            // Create a piece of toast.
            Toast pieceToast = Toast.makeText(getApplicationContext(), toastText.getText(), Toast.LENGTH_SHORT);
    
            // Show the toast.
            pieceToast.show();
        }
    }
    

    【讨论】:

    • 每次加载活动时都要这样做 - 这是不正确的。
    • @Jin35 onCreate 在活动加载时被调用。我怎么不清楚?
    • onCreate 来自活动构造函数的调用。在这两种情况下,创建对象和调用setOnClickListener 都只发生一次。当用户返回此活动时,onCreate 方法不会被调用。 developer.android.com/reference/android/app/Activity.html
    • @Jin35 未被调用* :P
    • @Jin35 学会构图你的答案! SO的症结所在!掌心
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多