Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between setText() and append()

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");
like image 870
CJ Harries Avatar asked Oct 14 '13 05:10

CJ Harries


People also ask

What is the use of append in Android?

append. Appends the specified character sequence to this Appendable . Depending on which class implements the character sequence csq , the entire sequence may not be appended. For instance, if csq is a CharBuffer then the subsequence to append is defined by the buffer's position and limit.

What is the difference between EditText and TextView?

EditText is used for user input. TextView is used to display text and is not editable by the user. TextView can be updated programatically at any time.

What is .SetText in Java?

SetText substitutes the characters sText for the text in the text field. This method works only with the first line of multi-line text fields. If iStartChar is specified, SetText substitutes sText for the characters starting with the iStartChar character, and continuing to the end of the line.

What is append in Java swing?

The append() method of Java StringBuilder class is used to append the string value to the current sequence. There are various overloaded append() methods available in StringBuilder class.


2 Answers

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"

like image 190
Emre Koç Avatar answered Oct 13 '22 20:10

Emre Koç


setText will replace the existing text with new text.

From Android doc:
Sets the text that this TextView is to display (see setText(CharSequence)) and also sets whether it is stored in a styleable/spannable buffer and whether it is editable.

append will keep the old text and add the new one more like concatenating.

From Android Doc
Convenience method: Append the specified text to the TextView's display buffer, upgrading it to BufferType.EDITABLE if it was not already editable.

like image 45
minhaz Avatar answered Oct 13 '22 21:10

minhaz