如何将点击侦听器设置为 属性 of activity?

How to make on click listener as property of activity?

我正在尝试将我的点击事件作为 activity 的属性。我不确定这是否是最好的方法,但作为 Android 的新手,我借用了我从 C# 或 JavaScript 中了解到的知识。这是我正在尝试做的事情:

public class MainActivity extends Activity {

    TextView topTextView;
    Button counterButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Init view elements
        topTextView = (TextView) findViewById(R.id.textView1);
        counterButton = (Button)findViewById(R.id.button1);

        // Init element events
        counterButton.setOnClickListener(onCounterButtonClick);
    }

    private OnClickListener onCounterButtonClick(final MainActivity activity) {
        return new OnClickListener() {

            @Override
            public void onClick(View view) {
                Toast toast = Toast.makeText(activity, 
                    "Button was clicked", Toast.LENGTH_LONG);
                toast.show();

                topTextView.setText("Updated from button");
            }

        };
    }
}

有更好的方法吗?

您可以将侦听器声明为 class 的字段。

private OnClickListener onCounterButtonClick  = new OnClickListener(){
        @Override
        public void onClick(View view) {
            Toast toast = Toast.makeText(MainActivity.this, "Button was clicked", Toast.LENGTH_LONG);
            toast.show();
        }
    };
}

并将其作为参数。

您可以使用 View.OnClickListener() 匿名内部 class。

counterButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            Toast toast = Toast.makeText(activity, 
                "Button was clicked", Toast.LENGTH_LONG);
            toast.show();
        }
    });

确切地说,我现在不知道是否是您想要的。但是 Android 有其他方法来定义 Button 中的操作,例如: 在您的 activity.xml 中定义按钮 属性 onClick=myFunction 然后在您的 Activity.java 中编写这样的方法:

activity.xml

....
<Button
    android:id="@+id/Button_1"
    android:onClick="myFunction"
    android:text="@string/Button_1" />
....

Activity.java

public void myFunction(View v) {
    Toast toast = Toast.makeText(this, "Button was clicked", Toast.LENGTH_LONG).show();
}

祝你好运!

你也可以用这个,

public class MainActivity extends Activity implements OnClickListener{

    TextView topTextView;
    Button counterButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Init view elements
        topTextView = (TextView) findViewById(R.id.textView1);
        counterButton = (Button)findViewById(R.id.button1);

        // Init element events
        counterButton.setOnClickListener(this);
    }

            @Override
            public void onClick(View view) {
               if(view.getId == R.id.button1){
                Toast toast = Toast.makeText(activity, 
                    "Button was clicked", Toast.LENGTH_LONG);
                toast.show();

                topTextView.setText("Updated from button");
                }
           }
}
 @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Init view elements
        topTextView = (TextView) findViewById(R.id.textView1);
        counterButton = (Button) findViewById(R.id.button1);

        // Init element events
        counterButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Toast toast = Toast.makeText(getApplicationContext(),
                        "Button was clicked", Toast.LENGTH_LONG);
                toast.show();

                topTextView.setText("Updated from button");
            }
        });
    }

你也可以直接设置onClickListener,而不是传递参数activity,你可以使用getApplicationContext()函数来获取上下文。