java - 在android中,上下文什么时候不同于 "this"?

标签 java android android-context

我在 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)。没有工具,你就无法做到这一点。设置不带 thisonClickListener 的示例:

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/

相关文章:

java - 如何使用 Apache POI 在 Java 中读取 Excel ListBox 值

java - 着色器android错误: "Invalid version shader"

java - 较低 API 级别的 Android 安全性

android - 将 Context 与 AppCompatActivity 结合使用

java - 将 arraylist 与字符串、int、double 一起使用

Android Studio 3.5 Cause : buildOutput. apkData must not be null Clean & Rebuild 已经尝试过

android - EditText 事件处理程序以获取已按下键的通知

Android:ProgressDialog 不显示

java - 在 CustomView 类中获取 MainActivity 上下文

java - tomcat 或 glassfish 作为 cometd 服务器?