如何在Android TextView中清除文本?

6

So I have an Android program like so:

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 的操作类似于 JTextFieldJTextArea,在这些组件中将文本设置为""可以清除其内容。

我如何清空文本?


尽量不要混淆TextViewEditTextEditText类似于JTextField/JTextArea,而TextView则类似于JLabel(以及相应的较大的不可编辑框)。 - ataulm
@ataulm 谢谢你提到这个!! :-) - An SO User
5个回答

14

试试这个,

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("");
    }
    }
  }

嗯...将一个Activity作为监听器是一个好的实践吗?还是我应该自己创建一个类并将其作为监听器呢? :-) - An SO User

4
为了回答你的问题,我在我的应用中使用这种方法。不是将文本设置为(""),而是使用getText().clear();方法清除存储的值。个人认为这样做更加专业,并且更好地运用了Android中的清除命令。
clearButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    editText.getText().clear();
                }
            });

编辑:原始帖子有“EditText”标签,所以我从那个角度回答了问题。 这适用于EditText。对于TextView,只需调用textview.setText("");


2
不要把你在这里描述的清除函数视为正确的函数。 - Hassan
对我来说很好用。你确定它是一个编辑文本框吗? - A P
1
我的错。这是一个TextView。感谢@Avi。 - Hassan
所以它只适用于编辑文本。您介意取消踩吗? - A P

3
是的,是这样。你的问题与 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) 总是 false。你需要为 clear 视图/按钮注册一个 View.OnClickListener(),或者让你的 Activity 实现 View.OnClickListener 并设置按钮 this 作为 setOnClickListener

可以有一个通用的监听器来处理所有的2个按钮吗? - An SO User
是的,我已经在我的答案中指出了。您可以创建一个实现View.OnClickLister的类,并将同一个实例用于两个按钮。 - Blackbelt

2
你的onClick方法有误。你只为一个按钮添加了该方法,然后再检查它是哪个按钮。这永远不会是你的“清除”按钮,因为它只监听你的“添加”按钮的单击事件。

有没有可能使用 if-elseif 来编写一个通用的监听器,以处理所有的按钮? - An SO User
@LittleChild 是的,你的Activity可以作为一个通用的监听器(参见No_Rulz的回答)。但是你仍然需要将它添加到每个按钮中。 - ataulm
是的,请查看No_Rulz的答案。你需要让你的Activity扩展OnClickListener接口(注意不要导入Dialog的OnClickListener,而是View的!),这将为你提供1个通用的点击方法。你可以使用button.setOnClickListener(this)为所有按钮订阅它。在onClick方法中,只需使用switch/case语句即可。 - Stefan de Bruijn
当然可以。我可以在Activity中定义一个onClick(View v),并将其添加到所有按钮中。这样它就可以同时处理两个按钮了? :) - An SO User
或者在你的按钮xml中添加android:onClick - Stefan de Bruijn

1

使用

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("");
            }
        });
}


不错,但你应该尽量提供一些信息。 - A P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接