Подтвердить что ты не робот

Как поймать событие click на кнопке?

.NET Developer здесь только начинается с Eclipse и Android.

Может ли кто-нибудь показать меня самым простым способом, с абсолютными наименьшими строками кода, как сделать что-то при нажатии кнопки?

Моя кнопка имеет id button1, и я просто хочу посмотреть, где/как записать обработчик onClick().

Итак, скажем, у меня imageview1 установлено невидимое. Как я могу сделать это видимым при нажатии кнопки?

EDIT:

Спасибо всем, но поскольку ни один из ваших примеров не работает для меня, я попробую: может кто-нибудь, пожалуйста, напишите код ENTIRE, чтобы сделать эту работу? Не только метод, потому что, когда я пытаюсь использовать ЛЮБОЙ из ваших методов, я получаю ошибки повсюду, поэтому, очевидно, чего-то еще не хватает. Мне нужно все увидеть, начиная со всего импорта.

4b9b3361

Ответ 1

/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);
      }
    });

  }
}

/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>

Ответ 2

Абсолютно лучший способ: просто дайте вашей активности реализовать 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
    }
}

Затем в вашем файле макета 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" />

Это самый чистый способ сделать это. Сегодня я использую его и во всех моих проектах.

Ответ 3

Просто объявите метод, например: если идентификатор кнопки ur является кнопкой1, тогда

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

Если вы хотите сделать видимым imageview1, то в этом методе напишите:

imageview1.setVisibility(ImageView.VISIBLE);

Ответ 4

Все ответы основаны на анонимном внутреннем классе. У нас есть еще один способ добавить событие click для кнопок, а также других компонентов.

Активность должна реализовывать интерфейс 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());
   }
}

Ответ 5

Взято из: http://developer.android.com/guide/topics/ui/ui-events.html

// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListener() {
    public void onClick(View v) {
      // do something when the button is clicked
    }
};

protected void onCreate(Bundle savedValues) {
    ...
    // Capture our button from layout
    Button button = (Button)findViewById(R.id.corky);
    // Register the onClick listener with the implementation above
    button.setOnClickListener(mCorkyListener);
    ...
}

Ответ 6

Вы можете просто сделать это в своем методе onCreate(). Например:

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

    //Assign the button to a variable
    Button button1 = (Button)findViewById(R.id.button1);

    //Assign the ImageView to a final variable, so that it's
    //accessible from an inner class
    ImageView imageView = (ImageView)findViewById(R.id.imageview1);

    //Assign it a new OnClickListener
    button1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            imageView.setVisibility(View.VISIBLE);
        }
    }
}