新对象发行

时间:2018-09-22 14:37:03

标签: android

我是Android Studio的新手。

我在Android Studio中制作了一个TextView和一个按钮。

当我单击按钮时,它应该触发此方法:

 public void click (View view)
   {
   TextView tex = (TextView) findViewById(R.id.text_view);
   tex.setText("Hello");
   }

代码以这种方式工作。 但是当我做这样的方法时:

public void click (View view)
       {
       TextView tex = new TextView(this);
       findViewById(R.id.text_view);
       tex.setText("Hello");
       }

代码没有执行应做的工作。我的意思是TextView文本没有任何反应。

谁能告诉我有什么区别?为何会发生这种情况,或者第二种情况出了什么问题?

6 个答案:

答案 0 :(得分:0)

TextView tex = new TextView(this); 该代码创建了新的textview实例,但此textview与您的视图没有任何联系。

但是TextView tex = (TextView) findViewById(R.id.text_view);会找到具有给定ID的第一个后代视图,并将其分配给您的本地变量,以便您可以连接。

更多信息https://developer.android.com/reference/android/view/View#findViewById(int)

答案 1 :(得分:0)

public void click (View view)
   {
   TextView tex = new TextView(this);
   findViewById(R.id.text_view);
   tex.setText("Hello");
   }

在此部分中,tex是textView对象,但视图上没有任何字段。

TextView tex= findViewById(R.id.textView) 

此行将视图分配给tex对象。 原因很明显。

答案 2 :(得分:0)

在我看来,您是编程的新手,对Java的了解不是很好,并且没有任何某种编程经验。您会看到,半冒号用于终止一行代码。因此,这就是您错过的事情之一。其次,这个:

TextView tex = (TextView) findViewById(R.id.text_view);
tex.setText("Hello");

从第一行的视图中获取引用,并在第二行中设置文本。虽然这样:

TextView tex = new TextView(this);
findViewById(R.id.text_view);
tex.setText("Hello");

在第一行上创建一个新视图。在不使用参考的情况下获取第二个视图的参考。并将第三行上的文本设置为在第一行上创建的新视图。

建议

OOP并不是一个很难的主题,但是,如果您真的想编码,那么在开始使用OOP之前,最好先了解一些有关简单编程的知识。

答案 3 :(得分:0)

https://developer.android.com/reference/android/view/View.html#findViewById(int)

findviewbyid返回一个View。

TextView tex = new TextView(this);
findViewById(R.id.text_view);

执行此操作时,创建了一个新的TextView,但实际上您从未对findViewById返回的View进行任何操作,因为您忽略了它。

答案 4 :(得分:0)

下面列出了两种好的方法

  1. setOnClickListner
  2. 使用android视图绑定库(可能与ViewModel结合使用,比较困难,研究速度慢!:p)
  3. 使用android:onClick="methodName()"属性,(我个人不喜欢这样做,AFAIK不能分段运行)

这是最简单的一个! 在onCreate被调用之后,将此代码放入setContentView

Button btn = findViewById(R.id.your_btn_id);
btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //handle triggner here i.e set hello to your textView
            }
        });

编码愉快!

答案 5 :(得分:0)

您需要将tex添加到布局中才能看到它:

((ViewGroup) findViewById(R.id.some_container_id)).addView(tex)

致电时

findViewById(R.id.text_view);

并忽略返回值,此功能无效