Java 如何在嵌套类中获取上下文?
因为show只在嵌套类ButtonHandler中需要,所以我想执行以下操作Java 如何在嵌套类中获取上下文?,java,android,kotlin,Java,Android,Kotlin,因为show只在嵌套类ButtonHandler中需要,所以我想执行以下操作 public class MainActivity extends AppCompatActivity { private class ButtonHandler implements OnClickListener { @Override public void onClick(View view) { // removed for
public class MainActivity extends AppCompatActivity
{
private class ButtonHandler implements OnClickListener
{
@Override
public void onClick(View view)
{
// removed for simplicity
}
private void show(String s)
{
//Toast.makeText(this, s, LENGTH_LONG).show();
}
}
}
而不是下面
public class MainActivity extends AppCompatActivity
{
private class ButtonHandler implements OnClickListener
{
@Override
public void onClick(View view)
{
// removed for simplicity
}
}
private void show(String s)
{
Toast.makeText(this, s, LENGTH_LONG).show();
}
}
问题
如何在第一种方法中获取Toast.makeText的上下文?我熟悉c语言,但不熟悉java和android 处理嵌套类时,必须指定哪个类
使用它指的是ButtonHandler,它不会工作,因为它本身没有上下文。而是使用MainActivity.thisthis@MainActivity在Kotlin中,指的是外部类别:
Toast.makeText(MainActivity.this, s, LENGTH_LONG).show();
处理嵌套类时,必须指定哪个类
使用它指的是ButtonHandler,它不会工作,因为它本身没有上下文。而是使用MainActivity.thisthis@MainActivity在Kotlin中,指的是外部类别:
Toast.makeText(MainActivity.this, s, LENGTH_LONG).show();
如果ButtonHandler看起来是一个非静态的内部类,您可以使用MainActivity。为了对上下文进行引用,可以使用MainActivity而不是this:
如果ButtonHandler是静态的,那么MainActivity.this不起作用,您必须以某种方式将上下文对象传递给该方法。假设您是从onClick方法调用show,您可以利用View.getContext编写以下代码:
show(v.getContext(), s);
如果ButtonHandler看起来是一个非静态的内部类,您可以使用MainActivity。为了对上下文进行引用,可以使用MainActivity而不是this:
如果ButtonHandler是静态的,那么MainActivity.this不起作用,您必须以某种方式将上下文对象传递给该方法。假设您是从onClick方法调用show,您可以利用View.getContext编写以下代码:
show(v.getContext(), s);
可以通过MainActivity.this访问外部类实例。此外,还可以通过MainActivity.this访问字段。可以通过MainActivity.this访问外部类实例。此外,还可以通过MainActivity.this.field访问字段。您还可以创建一个私有变量
private Activity activity;
在onCreate方法中:
this.activity = this;
因为在每个嵌套类中,您都可以访问每个外部变量,但这当然不起作用。你的例子是这样的:
public class MainActivity extends AppCompatActivity{
private Activity activity;
public void onCreate(...){
this.activity = this;
...
}
private class ButtonHandler implements OnClickListener
{
@Override
public void onClick(View view)
{
// removed for simplicity
}
private void show(String s)
{
//Toast.makeText(activity, s, LENGTH_LONG).show();
}
}
}
请不要因为没有好的代码风格而杀了我您还可以创建一个私有变量
private Activity activity;
在onCreate方法中:
this.activity = this;
因为在每个嵌套类中,您都可以访问每个外部变量,但这当然不起作用。你的例子是这样的:
public class MainActivity extends AppCompatActivity{
private Activity activity;
public void onCreate(...){
this.activity = this;
...
}
private class ButtonHandler implements OnClickListener
{
@Override
public void onClick(View view)
{
// removed for simplicity
}
private void show(String s)
{
//Toast.makeText(activity, s, LENGTH_LONG).show();
}
}
}
请不要因为没有好的代码风格而杀了我,因为你的内部类不是stati,我可以访问外部环境。因为你的内部类不是stati,我可以访问外部环境。java中嵌套类的概念不同于c。在c中,设计不允许从InnerClass中访问OuterClass.this。java中嵌套类的概念与c不同。在c语言中,设计不允许从内部类访问OuterClass.this。