我们可以在java / android studio中同时使用“ this”和“ new”

问题描述 投票:-3回答:2

有完整的文档。


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的使用吗?

java android-studio-3.0
2个回答
0
投票

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

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

尽管我建议您看一下用XML定义布局,这里有https://developer.android.com/guide/topics/ui/declaring-layout指南,在线资源很多。

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


0
投票

您正在使用的EditText的构造函数是

public EditText (Context context)

请参见doc here

因此您需要给它一个Context类的实例。在您的情况下,您的MainActivity类扩展了AppCompatActivity,这又扩展了Context,因此您的类MainActivity 是a Context

see hierarchy here

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

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

new EditText(this)

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

© www.soinside.com 2019 - 2024. All rights reserved.