单击按钮时TextView不会更新

时间:2014-08-20 05:36:47

标签: java android textview

这是我的第一次尝试,可能看起来很幼稚。我有activity_main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.buch.pranav.andy.hisabkitab.MainActivity" >

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="30dp"
    android:onClick="clickHandler"
    android:text="@string/connect" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/button1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="65dp"
    android:text="@string/testVal2"
    android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>

我的MainActivity.java看起来像这样:

public class MainActivity extends ActionBarActivity {

//Auto generated code here

public void clickHandler(View view){
    View header = (View)getLayoutInflater().inflate(R.layout.activity_main, null);
    TextView tv = (TextView) header.findViewById(R.id.textView2);
    System.out.println("tv = "+tv.getText());
    tv.setText("lol");
}

//Auto generated code here 
}

现在,当我单击按钮时,我在logcat窗口中看到sysout,因此clickHandler的绑定没有问题,但我的应用程序屏幕上的textview不会更新! Logcat甚至没有显示任何异常被抛出。

我在这里缺少什么?

3 个答案:

答案 0 :(得分:5)

据我所知,你使用了错误的布局,因为你在点击手柄内部进行了充气,​​而不是使用你应该在&#34; onCreate&#34;中充气的布局。或&#34; onCreateView&#34;。

在onCreate中初始化视图,保留对TextView的引用,并仅从引用中修改此TextView。

您目前所做的是:创建一个视图 - 修改它 - 删除它(它永远不会附加到您的窗口)

做这样的事情:

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  final TextView textView2 = (TextView) findViewById(R.id.textView2);
  final Button button = (Button) findViewById(R.id.button1);
  button.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
           textView2.setText("lol");
        }

    });
}

答案 1 :(得分:2)

您正在对布局XML进行膨胀,但不会将其附加到活动视图层次结构中的任何位置,也不会将其设置为活动的内容视图。因此,您正在更新TextView中的文本,但它实际上并未在屏幕上显示。

您需要执行以下操作:

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

或者,如果您不希望布局成为主要内容视图,请在视图层次结构中正确附加布局。

答案 2 :(得分:0)

试试这个,

<强> activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.newproject.MainActivity" >

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="30dp"
    android:onClick="clickHandler"
    android:text="@string/connect" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/button1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="65dp"
    android:text="@string/textView2"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<强> MainActivity.java

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

    TextView tv;
    Button button;

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

    }

    public void clickHandler(View v) {
        tv = (TextView) findViewById(R.id.textView2);
        button = (Button) findViewById(R.id.button1);
        System.out.println("tv = " + tv.getText());
        tv.setText("lol");

    }
    }

<强>的strings.xml

 <?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">NewProject</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <string name="connect">Connect</string>
    <string name="textView2">This is the text</string>

</resources>

输出

应用启动时,

When the app runs

点击connect按钮后

enter image description here

Logcat中,您可以看到绿色的文字来自TextView

enter image description here