这个匿名内部阶级的替代品是什么?

时间:2011-08-06 07:40:48

标签: java android inner-classes anonymous-class

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

如何将此转换为非匿名内部类?

2 个答案:

答案 0 :(得分:1)

你只需要把它变成一个内部类:

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是方法中的局部变量(而不是创建类中的实例变量),则需要将其传递给内部类的构造函数。

答案 1 :(得分:0)

您应该声明一个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();
        }
    }
}