我们可以一起使用“ this”和“ new”吗

时间:2019-11-25 13:08:15

标签: java android

有完整的文档。


import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
//unused //
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android .widget.TextView;


import android.app.ActionBar;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LayoutParams lp ;
         lp=new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT),
                ActionBar.LayoutParams.MATCH_PARENT);

        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);

        LayoutParams tvLP;
        tvLP = new LayoutParams(LayoutParams.MATCH_PARENT,
                    LayoutParams.WRAP_CONTENT);


        TextView tvName = new TextView(this);
        tvName.setText("姓名: ");
        ll.addView(tvName,tvLP);

首先,没有错误日志。我问这个问题是因为我想知道为什么“ this”和“ new”可以一起使用。 我认为不能放“ this”是因为据我所知,在语句之前没有类似Int和String类型的东西,没有理由使用“ this”

EditText etName = new EditText(this);

EditText etName = new EditText();

为什么有(这个)的人能工作?实际上,Android Studio可以帮助在此之前添加“内容”,这意味着

EditText etName = new EditText(Context:this);

有人可以在这句话中解释使用this吗?

2 个答案:

答案 0 :(得分:0)

在这种情况下,您描述的this是您的MainActivity类。这是有效的,因为Activity扩展了Context,并且TextView类的构造函数采用了上下文。

有关活动和环境之间关系的更多信息,请点击此处:What is the difference between Activity and Context?

尽管如此,我还是建议您考虑使用XML定义布局,这里https://developer.android.com/guide/topics/ui/declaring-layout有指南,在线资源也很多。

我不确定这是否能回答您问题的最后一部分?

答案 1 :(得分:0)

您使用的EditText的构造函数是

public EditText (Context context)

请参阅doc here

因此,您需要给它一个Context类的实例。 在您的情况下,您的课程MainActivity扩展了AppCompatActivity,而该课程又扩展了Context,因此您的课程MainActivity Context

see hierarchy here

引用MainActivity实例的方法是使用 this 关键字。

因此,您将 this 传递给EditText的构造函数。即:

new EditText(this)

所有这些的要点是,现在,您刚刚实例化的新EditText引用了创建它的MainActivity实例。然后,如果需要,它可以回叫它。