我刚开始学习Android并在google android网站上学习教程。
在我正在进行的教程中,我正在建立一个开始另一项活动的意图。
com.mycompany.myfirstapp;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
public class MyActivity extends AppCompatActivity {
/**Called when the user clicks the Send button**/
public void sendMessage(View view) {
//Do something in response to button
Intent intent = new Intent(this, DisplayMessageActivity.class);
}
}
教程说“将Context作为其第一个参数(因为Activity类是Context的子类,所以使用它)。”
我想这个解释应该足够明确,但我不明白。
我理解的是,sendMessage方法中的'this'是指当前类,因此用作当前类的实例变量,即MyActivity。
这是真的吗?
如果这是真的,那么它的类型是活动?哪个又是Context的子类?
我不明白为什么'this'的类型是Activity。 请为我解释一下。 谢谢。
答案 0 :(得分:5)
我的理解是sendMessage方法中的'this'是指当前类,因此用作当前类的实例变量。这是真的?
正确。
如果这是真的,那么它的类型是活动?
它的类型是MyActivity
,它延伸(间接)Activity
,所以你可以在这里传递它。
又是Context的子类?
正确。
MyActivity
扩展AppCompatActivity
扩展FragmentActivity
扩展Activity
扩展Context
(省略某些步骤)。因此,只要您需要Context
实例,就可以传递Activity
实例,这就是继承的工作方式。
修改强>
Class
和Activity
不一样。 Activity
是Android SDK的一个类。类就像一个模板,可用于创建新对象的实例。 Intent
的构造函数要求您在其第一个参数中传递Context
的实例。 MyActivity
扩展了Context
,因此您可以在MyActivity
的costructor中传递Intent
的实例。方法内的this
保存对当前对象的引用。
答案 1 :(得分:2)
是的,this
是当前类的实例(在您的情况下为MyActivity
)。当Activity
正在扩展AppCompatActivity
时,它也扩展了所有父母:
android.content.Context
↳ android.content.ContextWrapper
↳ android.view.ContextThemeWrapper
↳ android.app.Activity
↳ android.support.v4.app.FragmentActivity
↳ android.support.v7.app.AppCompatActivity
答案 2 :(得分:0)
this
是Activity
的一个实例,因为这是AppCompatActivity
扩展的内容。
有待进一步参考,请参阅: http://developer.android.com/reference/android/support/v7/app/AppCompatActivity.html