因为只在嵌套类show
中需要ButtonHandler
,所以我想执行以下操作
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();
}
}
如何在第一种方法中获取this
的上下文Toast.makeText
?我熟悉c#但不熟悉java和android。
答案 0 :(得分:2)
如果ButtonHandler
是非静态内部类(它看起来像是),您可以使用MainActivity.this
而不是this
来引用Context
1}}:
Toast.makeText(MainActivity.this, s, LENGTH_LONG).show();
如果ButtonHandler
是静态的(因此MainActivity.this
不起作用),您必须以某种方式将上下文对象传递给方法。假设您从show()
方法调用onClick()
,您可以利用View.getContext()
并写下:
show(v.getContext(), s);
private void show(Context c, String s)
{
Toast.makeText(c, s, LENGTH_LONG).show();
}
答案 1 :(得分:1)
在处理嵌套类时,您必须指定哪个类。
使用this
是指ButtonHandler
,它不起作用,因为它本身没有上下文。相反,使用MainActivity.this
(Kotlin中的this@MainActivity
)来引用外部类:
Toast.makeText(MainActivity.this, s, LENGTH_LONG).show();
答案 2 :(得分:1)
可以通过MainActivity.this
访问外部类实例。同样,可以通过MainActivity.this.field
访问字段。
答案 3 :(得分:1)
您还可以创建一个私有变量
private Activity activity;
并在您的onCreate方法中:
this.activity = this;
因为在每个嵌套类中您都可以访问每个外部变量,但是“ 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();
}
}
}
请不要因为不好的代码风格而杀了我