Как очистить текст в Android TextView?


Итак, у меня есть такая программа для Android:

package com.example.androiddemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

public class AndroidDemo extends Activity {
    String[] messages = {"Short Text",
                         "I want to show some really long text" +
                         "on the display of the phone. " +
                         "Having run out of ideas on what to type, " +
                         "I am adding this text which makes absolutely " +
                         "no sense."};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final Button add = (Button) findViewById(R.id.addBtn);
        final Button clear = (Button) findViewById(R.id.clrBtn);
        final EditText text = (EditText) findViewById(R.id.display);

        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(v == add){
                    text.setText(messages[new java.util.Random().nextInt(messages.length)]);
                }else if(v == clear){
                    text.setText("");
                }
            }
        });
    }
}  

Кнопка для добавления текста в TextView работает отлично, однако текст никогда не очищается.
Я полагал, что операция TextView будет аналогична JTextField или JTextArea, где установка текста на "" очищает его.

Как очистить текст?

5 4

5 ответов:

Попробуйте это,

public class AndroidDemo extends Activity implements OnClickListener{
Button add, clear;
EditText text;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        add = (Button) findViewById(R.id.addBtn);
        clear = (Button) findViewById(R.id.clrBtn);
        text = (EditText) findViewById(R.id.display);
        add.setOnClickListener(this);
        clear.setOnClickListener(this);
        }
@Override
public void onClick(View v){
    if(v == add){
        text.setText(messages[new java.util.Random().nextInt(messages.length)]);
    }else if(v == clear){
        text.setText("");
    }
    }
  }

Да, это так. Ваша проблема связана с onClickListener.

 add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(v == add){
                    text.setText(messages[new java.util.Random().nextInt(messages.length)]);
                }else if(v == clear){
                    text.setText("");
                }
            }
        });

В этом случае if(v == clear) всегда ложно. Вы должны зарегистрировать View.OnClickListener() для clear вида/кнопки, или сделать вашу деятельность реализует View.OnClickListener и установить для обеих кнопок this как setOnClickListener

Вы ошибаетесь с вашим методом onClick. Вы добавляете его для 1 кнопки, а затем проверяете, какая это кнопка. Это никогда не будет ваша кнопка "Очистить", так как он только слушает вашу кнопку "Добавить" onclick.

Чтобы ответить на ваш вопрос, я использую это в своих приложениях, вместо установки текста в (""), он очищает его с помощью метода getText().clear();. Лично я использую его, потому что он выглядит более профессионально и правильно использует четкую команду в android.

clearButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    editText.getText().clear();
                }
            });

Чтобы уточнить, это работает с EditText, с TextView, просто сделайте textview.setText ("");

Использовать

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

        final TextView tv=(TextView)findViewById(R.id.textView);
        Button btnclear=(Button)findViewById(R.id.btnClear);

	btnclear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tv.setText("");
            }
        });
}