如何捕获按钮上的单击事件?

Jim*_*y D 33 android

.NET Developer刚刚开始使用Eclipse和Android.

有人可以用最简单的方式向我展示,使用绝对最少的代码行,单击按钮时如何做某事?

我的按钮有id button1,我只想看看在哪里/如何编写onClick()处理程序.

所以,让我说我已经imageview1设定为隐形了.单击按钮时如何使其可见?

编辑:

谢谢大家,但由于没有一个示例适合我,我会尝试这样做:有人可以发布完整的代码来完成这项工作吗?不仅仅是方法,因为当我尝试使用你的任何方法时,我会在整个地方出现错误,所以显然缺少其他东西.从所有进口开始,我需要看到一切.

Ben*_*ams 38

/src/com/example/MyClass.java

package com.example

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MyClass extends Activity
{

  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);    

    Button button = (Button) findViewById(R.id.button1);

    button.setOnClickListener(new OnClickListener()
    {
      public void onClick(View v)
      {
         ImageView iv = (ImageView) findViewById(R.id.imageview1);
         iv.setVisibility(View.VISIBLE);
      }
    });

  }
}
Run Code Online (Sandbox Code Playgroud)

/res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
    <Button 
      android:text="Button"
      android:id="@+id/button1"
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"
    />
    <ImageView 
      android:src="@drawable/image" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:id="@+id/imageview1"
      android:visibility="invisible"
    />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

  • 这就像回到.NET的汇编语言一样.谢谢. (12认同)

mre*_*elt 27

绝对最好的方法:让你的活动实现View.OnClickListener,然后onClick像这样编写你的方法:

public void onClick(View v) {
    final int id = v.getId();
    switch (id) {
    case R.id.button1:
        // your code for button1 here
        break;
    case R.id.button2:
        // your code for button2 here
        break;
    // even more buttons here
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,在XML布局文件中,您可以使用以下属性直接设置单击侦听器android:onClick:

<Button
    android:id="@+id/button1"
    android:onClick="onClick"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button 1" />
Run Code Online (Sandbox Code Playgroud)

这是如何做到最干净的方式.我今天也在所有的矿山项目中使用它.

  • 我个人认为这非常难看:1)如果你重命名方法,Lint不会警告你,你只会在运行时学习它.2)该方法必须公开才能实现.3)该方法必须在活动中,如果您使用片段,它会惹恼您. (4认同)

Jay*_*mar 7

只需声明一个方法,例如:如果你的按钮id是button1那么,

button1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(Context, "Hello", Toast.LENGTH_SHORT).show();
        }
    });
Run Code Online (Sandbox Code Playgroud)

如果要使imageview1可见,则在该方法中写入:

imageview1.setVisibility(ImageView.VISIBLE);
Run Code Online (Sandbox Code Playgroud)


Gna*_*yan 5

所有答案都基于匿名内部类.我们还有一种方法可以为按钮以及其他组件添加点击事件.

一个活动需要实现View.OnClickListener接口,我们需要覆盖onClick函数.我认为与使用匿名类相比,这是最好的方法.

package com.pointerunits.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {
   private Button login;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      login = (Button)findViewById(R.id.loginbutton);
      login.setOnClickListener((OnClickListener) this);
      Log.i(DISPLAY_SERVICE, "Activity is created");

   }    

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {

      getMenuInflater().inflate(R.menu.main, menu);
      return true;
    }

   @Override
   public void onClick(View v) {
     Log.i(DISPLAY_SERVICE, "Button clicked : " + v.getId());
   }
}
Run Code Online (Sandbox Code Playgroud)