Что я использую в качестве параметра для метода setOnClickListener ()? - PullRequest
2 голосов
/ 28 ноября 2011

Я пытаюсь сделать несколько методов OnClickListener для 5 кнопок в моей программе, и я смог объявить их, и я сделал переключение, используя xml id того, что было нажато, но мне нужен параметр для Метод setOnClickListener, когда я его вызываю, и все, что будет работать, будет нулевым. Я также попытался передать это, поэтому метод имеет контекст.

Вот код:

 add.setOnClickListener(null);
        sub.setOnClickListener(null);
        mult.setOnClickListener(null);
        div.setOnClickListener(null);
        equal.setOnClickListener(null); 

Ответы [ 5 ]

3 голосов
/ 29 ноября 2011

Параметр должен быть экземпляром некоторого объекта, который реализует интерфейс OnClickListener. Один из способов сделать это - использовать анонимный внутренний класс:

add.setOnClickListener(new OnClickListener{
  public void onClick(View view){
//your event handler code here
}
});

другой способ - заставить ваш класс реализовать OnClickListener - сделать это, изменив объявление так:

public class MyActivity extends Activity implements OnClickListener{

затем определите реализацию для метода onClick:

public void onClick(View view){
   if(view == add){
      //handle add button click
    }else if (view == sub){
      //handle sub button click
    }
    //etc

}

затем для установки прослушивателя вы можете сделать:

add.setOnClickListener(this);
2 голосов
/ 29 ноября 2011

Предполагается, что вы передадите View.OnClickListener этой функции, которая является слушателем, который будет вызываться при нажатии кнопки.

Чтобы сделать это, вы можете:

  1. Объявить этого слушателя в XML макета с помощью кнопки, как указано в кнопке 4 на этом сайте .

  2. Создайте экземпляр View.OnClickListener и передайте его методу setOnClickListener, как в примере ниже (взято с сайта Android , который является отличным источником):

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

Поскольку View.OnClickListener является интерфейсом, ваша деятельность может также реализовать его и быть самим слушателем, в этом случае вы передадите экземпляр действия (this) к методу setOnClickListener, но это только один вариант, а не рекомендованный ИМХО.

0 голосов
/ 29 ноября 2011

Если вы посмотрите на документацию , вы заметите, что в качестве параметра принимается View.OnClickListener . Если вам нужно пять отдельных слушателей, которые вы не собираетесь использовать где-либо еще, вы можете передать анонимный класс, реализующий onClick (View v), например

add.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v){
        //do required actions here
    }
});
0 голосов
/ 29 ноября 2011

Вам нужен конкретный класс здесь.Например:

imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // your code here
        }
    });
0 голосов
/ 29 ноября 2011

Исходя из .NET фона, я сначала боролся с тем же. Это просто синтаксис, отличный от .NET, поскольку Java не поддерживает свойства или события, к которым я привык. Вот простой пример того, как сделать это, используя переменную прослушивателя click на уровне класса ...

@Override
private void onCreate(Bundle bundle) {
    myButton.setOnClickListener(this.genericButtonListener);
}

private OnClickListener genericButtonListener = new OnClickListener() {
   @Override
   public void onClick(View v) {
    //v represents your button
   }        
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...