2017-03-07 72 views
0

在下面的代码中,我可以写什么来代替Play.this,以便它可以自动使用它所使用的类的名称,而无需写入名称(在本例中为“播放”)AlertDialog.Builder builder = new AlertDialog.Builder(Play.this);如何自动使用班级名称?

+1

你能不能给多一点上下文到这似乎? “这个班”是什么意思? – tadman

+0

我试过使用: 'AlertDialog.Builder builder = new AlertDialog.Builder(this.getClass()。this)'但它没有工作 –

+1

这没有任何意义......你需要一个'Context'变量,而不是' Class'。和'getClass()。这个'不能编译 –

回答

1

设置上下文(此处)前还有其他事情需要考虑。

第一种情况 - 如果你是在扩展其基础样活性/服务上下文中的某一类,你是在一个内部类,你可以用“这个”

二 - 如果你在一个扩展基类的上下文的类中,比如Activity/Services,并且你在一个内部类中,你可以使用(Play.this),因为在这种情况下,“this”是关于内部类的。

三 - 如果你是在另一个类不具有一个背景下,你可以通过它在构造函数或方法,如:

class Test { 
    public void createBuilder(Context context) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    } 
} 
1

没有理由在Play类的代码中使用Play.this。只需使用this

AlertDialog.Builder builder = new AlertDialog.Builder(this); 

但是,如果你想要做的是从你的内部类,那么你需要this不会指向Context子类,这样你就可以即在父类的创建成员,即:

Context mContext; 

初始化它在IE onCreate()

mContext= this; 

,并使用mContext从听众的代码

AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 
+1

如果这是在'new View.OnClickListener'内,那么,是的,你需要'Play。这个' –

+0

再次阅读'代码是Play类的一部分'。你谈论内心阶层。这是不同的 –

+0

内部类是“另一类的一部分”,IMO :) –

0

我认为你要找的是this.getClass().getName()。如果您只需要非限定名称,请改为使用this.getClass().getSimpleName()。我对Android很少了解,但这就是通常在Java中这样做的方式。