如何从抽象父活动的匿名方法中获取此信息

时间:2015-03-10 21:27:21

标签: android android-activity

我有一个名为Animal的抽象活动和两个具体的后代活动猫和狗。

Cat& Dog将呈现相同的UI,由单个按钮组成,因此有一个布局,即Animal在OnCreate中设置的内容视图的activity_animal.xml。

我想通过OnClickListener的匿名实现在抽象Animal类中设置按钮的OnClickListener

private void setClickHandlers() {
    ((Button) findViewById(R.id.btn))
    .setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
            //how to get a reference to this?
        }
    });
}

在onClick中我想创建一个新的Intent。要制作Intent,我需要引用 this 。 通常,在这样的匿名方法代码中,我可以使用诸如的语法 的 EnclosingClass.this 但在这里,我不知道封闭的课程是什么。在运行时,它可能是猫或狗。

怎么做?

我能想到的唯一方法是在Animal中提供一个抽象的getThis(),它在每个具体的后代中被覆盖。

4 个答案:

答案 0 :(得分:1)

您应该可以说Animal.this作为您的背景。

private void setClickHandlers() {
    View view = findViewById(R.id.btn);
    view.setOnClickListener(new OnClickListener() {

        public void onClick(View view) {
            Intent intent = new Intent(Animal.this, MyDestinationActivity.class);
            ...
        }

    });
}

Animal.this可以是CatDog,但由于您只需Context,因此区别无关紧要。

答案 1 :(得分:1)

public void onClick(View arg0) {
    Activity host = (Activity) arg0.getContext();
}

答案 2 :(得分:0)

我会这样做:

private void setClickHandlers() {
  final Animal thiz = this;
  ((Button) findViewById(R.id.btn))
  .setOnClickListener(new OnClickListener() {
    public void onClick(View arg0) {
        Intent intent = new Intent( thiz, AAAA.class );
    }
  });
}

答案 3 :(得分:0)

您可以使用instanceof运算符确定运行时类型。

if (Animal.this instanceof Dog) {
   // dog related 
}
else {
   // cat related
}