Difference between setText() and append()

CJ Harries picture CJ Harries · Oct 14, 2013 · Viewed 49.3k times · Source

I'm curious about the difference setText() and append() are creating. I'm writing a very basic editor with line numbers. I have a TextView to hold line numbers on the left, paired with an EditText on the right to hold the data. Here's the XML:

<LinearLayout 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:gravity="top">
    <TextView
        android:id="@+id/line_numbers"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="0dip"
        android:gravity="top"
        android:textSize="14sp"
        android:textColor="#000000"
        android:typeface="monospace"
        android:paddingLeft="0dp"/>
    <EditText
        android:id="@+id/editor"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="text|textMultiLine|textNoSuggestions"
        android:imeOptions="actionNone"
        android:gravity="top"
        android:textSize="14sp"
        android:textColor="#000000"
        android:typeface="monospace"/>
</LinearLayout>

Ignoring some of the other things I'm doing, the most curious thing I came across was the extra spacing that showed up when I used append() (assuming things have been initialized and all that).

This below, in combination with the XML, sets a flush border between the TextView and EditText.

theEditor = (EditText) findViewById(R.id.editor);
lineNumbers = (TextView) findViewById(R.id.line_numbers);
theLineCount = theEditor.getLineCount();
lineNumbers.setText(String.valueOf(theLineCount)+"\n");

Change the last line to this, though, and suddenly each line in the TextView has padding on the right before the EditText.

lineNumbers.append(String.valueOf(theLineCount)+"\n");

It's not the end of the world. but I was curious what was causing this behavior. Since I'm new to the language, the only thing I could think of was maybe, when append throws the Editable on there, it adds the padding. If I can get an answer, I get to replace all of these nasty lines with simpler appends:

lineNumbers.setText(lineNumbers.getText().toString()+String.valueOf(newLineCount)+"\n");

Answer

Emre Ko&#231; picture Emre Koç · Oct 14, 2013
lineNumbers.setText("It is test,");

//Here lineNumbers have It is test

lineNumbers will have "It is test,". After that, if you use setText again, text will completely change

lineNumbers.setText("It is second test,");

//Here you'll lose first text and lineNumbers text will be "It is second test,"

After that, if you use append, lets see what will happen..

lineNumbers.append("It is third test,");

// Here you will not lose lineNumbers text.. It will be like this "It is second test,It is third test"