我在 Android(以及一般的 Java)上处于初级编程水平。我确实了解 Activity 继承自 Context 类。但是,在我遇到的每个代码片段中,每次必须提及上下文时,它都设置为“this”。
我的问题是:上下文何时与“this”不同?您能否提供一个需要与“this”不同的上下文示例?
非常感谢。
我在 Android(以及一般的 Java)上处于初级编程水平。我确实了解 Activity 继承自 Context 类。但是,在我遇到的每个代码片段中,每次必须提及上下文时,它都设置为“this”。
我的问题是:上下文何时与“this”不同?您能否提供一个需要与“this”不同的上下文示例?
非常感谢。
this
通常,当您在 Activity 的“内部”时,您会想要使用。但是,例如,当您使用 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
,因此该类继承自给定接口。没有工具,你做不到。onClickListener
设置without的示例this
:
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
}
});
}
}
在第二个示例中,我们定义了一个Anonymous Inner Class
,它将处理按钮的单击事件。请注意,在这种情况下,我们的 Activity 不会implements View.OnClickListener
。
例子:
class Example{
int number = 0;
public Example(int number){
this.number = number;
}
}
请注意,构造函数中的数字和类中的数字不相同。尽管它们具有相同的名称。说数字=数字没有意义。使用它,您可以在课堂上评估数字。
this
是对当前对象的引用——正在调用其方法或构造函数的对象。
里面Activity
的方法this
可以作为Context
对象使用,因为Activity
继承自ContextThemeWrapper
,继承自ContextWrapper
,继承自Context
。
Fragment
另一方面,A不继承自Context
。因此,例如,要获得Context
内部 a Fragment
,您必须打电话getActivity()
。
这适用于您从中调用this
的任何对象。
考虑你在OnClick()
a 的方法中View.OnClickListener
并且你想开始一个Activity
:
button.setOnClickListener (new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(this, NextActivity.class); // wrong because 'this' is the OnClickListener object
Intent intent = new Intent(CurrentActivity.this, NextActivity.class); // correct because 'this' is the CurrentActivity object
startActivity(intent);
}
});
例如,当您实现 OnClickListener 时,“this”是不同的。