我是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文本没有任何反应。
谁能告诉我有什么区别?为何会发生这种情况,或者第二种情况出了什么问题?
答案 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)
下面列出了两种好的方法
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);
并忽略返回值,此功能无效