这是我的第一次尝试,可能看起来很幼稚。我有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甚至没有显示任何异常被抛出。
我在这里缺少什么?
答案 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>
输出:
应用启动时,
点击connect
按钮后
在Logcat
中,您可以看到绿色的文字来自TextView
。