Как поймать событие click на кнопке?
.NET Developer здесь только начинается с Eclipse и Android.
Может ли кто-нибудь показать меня самым простым способом, с абсолютными наименьшими строками кода, как сделать что-то при нажатии кнопки?
Моя кнопка имеет id button1
, и я просто хочу посмотреть, где/как записать обработчик onClick()
.
Итак, скажем, у меня imageview1
установлено невидимое. Как я могу сделать это видимым при нажатии кнопки?
EDIT:
Спасибо всем, но поскольку ни один из ваших примеров не работает для меня, я попробую: может кто-нибудь, пожалуйста, напишите код ENTIRE, чтобы сделать эту работу? Не только метод, потому что, когда я пытаюсь использовать ЛЮБОЙ из ваших методов, я получаю ошибки повсюду, поэтому, очевидно, чего-то еще не хватает. Мне нужно все увидеть, начиная со всего импорта.
Ответы
Ответ 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);
}
}
}