【问题标题】:what is the substitute for this anonymous inner class?这个匿名内部类的替代品是什么?
【发布时间】:2011-10-21 09:12:21
【问题描述】:
btnOpen.setOnClickListener(new OnClickListener() 
{ 
  public void onClick(View v) 
      { 
             Toast.makeText(getBaseContext(), 
             "Time selected:" +  
             timePicker.getCurrentHour() +  
             ":" + timePicker.getCurrentMinute(), 
             Toast.LENGTH_SHORT).show(); 
       } 
}); 

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

【问题讨论】:

    标签: java android inner-classes anonymous-class


    【解决方案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 是您方法中的局部变量(与创建类中的实例变量相反),您需要将其传递给内部类的构造函数。

    【讨论】:

    • 嵌套类需要声明为私有类 InnerOnClickListener extends OnClickListener
    • @Brett:不是界面吗?因此实现,而不是扩展。 (几分钟前我更正了我的原件。)
    • 谢谢乔恩。我看到有些事情是错过了。试图提供帮助。
    • 私有类 InnerOnClickListener 实现 OnClickListener /私有类 InnerOnClickListener 扩展 OnClickListener
    • @skbishi:我不明白你的评论试图表达的意思。你是在问你应该使用哪个?
    【解决方案2】:

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

    【讨论】:

    • 这仍然是一个匿名内部类,不是吗?
    • @basicsharp-我的朋友你的回答也很有用,因为现在我能够区分两者
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多