что заменит этот анонимный внутренний класс? - PullRequest
0 голосов
/ 06 августа 2011
btnOpen.setOnClickListener(new OnClickListener() 
{ 
  public void onClick(View v) 
      { 
             Toast.makeText(getBaseContext(), 
             "Time selected:" +  
             timePicker.getCurrentHour() +  
             ":" + timePicker.getCurrentMinute(), 
             Toast.LENGTH_SHORT).show(); 
       } 
}); 

Как преобразовать это в неанонимный внутренний класс?

Ответы [ 2 ]

1 голос
/ 06 августа 2011

Вам просто нужно сделать его внутренним классом:

btnOpen.setOnClickListener(new InnerOnClickListener());

...

private class InnerOnClickListener implements OnClickListener
{
     public void onClick(View v) 
     { 
         Toast.makeText(getBaseContext(), 
                        "Time selected:" +  
                        timePicker.getCurrentHour() +  
                        ":" + timePicker.getCurrentMinute(), 
                        Toast.LENGTH_SHORT).show(); 
     } 
}

Обратите внимание на использование getBaseContext(), которое будет фактически вызываться в экземпляре создаваемого класса.

Если timePicker является локальной переменной в вашем методе (в отличие от переменной экземпляра в создаваемом классе), вам нужно передать это в конструктор внутреннего класса.

0 голосов
/ 06 августа 2011

Вы должны объявить реализацию интерфейса View.OnClickListener:

btnOpen.setOnClickListener(buttonClickListener);
...
private View.OnClickListener buttonClickListener = new View.OnClickListener() {
    @Overide
    public void onClick(View v) {
        Toast.makeText(getBaseContext(),
                "Time selected:" +
                timePicker.getCurrentHour() +
                ":" + timePicker.getCurrentMinute(),
                Toast.LENGTH_SHORT).show();
        }
    }
}
...