我在 Android(以及一般的 Java)编程方面处于初级阶段。我确实明白 Activity 继承自 Context 类。然而,在我遇到的每个代码 fragment 中,每次必须提及上下文时,它都会设置为“this”。
我的问题是:上下文什么时候不同于“this”?您能否提供一个现实生活中需要与“this”不同的上下文示例?
非常感谢。
最佳答案
通常,当您位于 Activity“内部”时,您会需要使用this
。但是,当您使用 Helper 类时,引用 this
将不起作用。一个例子可以是这样的:
public class MyActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
}
}
一个案例,你不能:
public class MyHelper
{
/* some code of yours */
public void lockOrientation(Activity activity)
{
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
}
}
上面的代码将方向锁定为当前方向。请注意,您需要为该方法提供 Activity 参数,因为您不能使用:
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
在第一个示例中,您可以使用 this
来实现此目的,因为您位于 Activity 的“内部”。
另一种类型的示例,如何设置onClickListener
。
第一个示例,当您使用this
时:
public class MyActivity extends Activity implements View.OnClickListener
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Button btn=(Button)findViewById(R.id.mybutton);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
//handle the click event
}
}
在此示例中,您可以使用 this
,因为在第一行中,我们编写了 implements View.OnClickListener
,因此该类继承自给定的接口(interface)。没有工具,你就无法做到这一点。设置不带 this
的 onClickListener
的示例:
public class MyActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Button btn=(Button)findViewById(R.id.mybutton);
btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
//handle the click event
}
});
}
}
在第二个示例中,我们定义一个匿名内部类
,它将处理按钮的单击事件。请注意,在这种情况下,我们的 Activity 并未实现 View.OnClickListener
。
关于java - 在android中,上下文什么时候不同于 "this"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19358517/