开发者

Android Textview spitting out something I never wrote

package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
  开发者_如何学Go      TextView tv = new TextView(this);
        tv.setText("Why did it say hello world?");
        setContentView(R.layout.main);
    }
}

I'm following the Hello, World tutorial on the android SDK site. When I set the text for tv, it never shows. Instead, the output is:

Hello World, HelloAndroid!

Where in the world is that coming from? I never wrote that text, ever, anywhere...freaky.


TextView tv = new TextView(this);             << create TextView object
tv.setText("Why did it say hello world?");    << set text to it
setContentView(R.layout.main);                << display the view defined in main.xml

as scriptocalypse said you can simply set the content view to tv, alternatively, and I think a better approach is to use the main.xml:

in main.xml there is a TextView and it has a property called id, it looks something like this: <TextView android:id="@+id/text" you can use this id to get the TextView object of this xml like this:

setContentView(R.id.xml);
TextView tv = (TextView)findViewById(R.id.text);
tv.setText("Your text");

There are 3 things to remember:

  1. R.id.text is corresponding to android:id="@+id/text".
  2. R.id.text is an integer, generated during the build of application, it's not a string, and cannot be manipulated as a string.
  3. setContentView has to be called before calling findViewById, otherwise, you will get null as return value of findViewById.


Check your main.xml file. It's likely being printed from there.

To get your own test there, add your new TextView to the main.xml

<TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:text="Your text here" />

(Note: the "Your text here" should really be brought out to the strings.xml file.)

To put in an editable text field, use an EditText field.

<EditText android:id="@+id/TextId" android:hint="background text"
            android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>


You should use setContentView before creating a new TextView object. Also, did you remember to add the TextView to the display?

 setContentView(tv)

I see you adding the xml layout, but you never add the newly created TextView


You are calling setContentView() and passing in a reference to a layout, specifically main.xml as noted by Haphazard. If you want to see your TextView that you just created, you should be able to pass the variable tv into the setContentView() method.

The default main.xml has a reference to a String in strings.xml in your res/ folder. In there is the definition of a String "Hello World", which is why you are seeing "Hello World".

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜